Replace DAVError with HTTPError + Error

That way we can avoid having different ways of representing the
same error value.
This commit is contained in:
Simon Ser 2022-05-02 11:37:45 +02:00
parent 8738a105fc
commit 4e8c5effe3
4 changed files with 19 additions and 34 deletions

View File

@ -327,14 +327,10 @@ const (
func NewPreconditionError(err PreconditionType) error {
name := xml.Name{"urn:ietf:params:xml:ns:caldav", string(err)}
elem := internal.NewRawXMLElement(name, nil, nil)
e := internal.Error{
Raw: []internal.RawXMLValue{
*elem,
return &internal.HTTPError{
Code: 409,
Err: &internal.Error{
Raw: []internal.RawXMLValue{*elem},
},
}
return &internal.DAVError{
Code: 409,
Msg: fmt.Sprintf("precondition not met: %s", string(err)),
Err: e,
}
}

View File

@ -469,14 +469,10 @@ const (
func NewPreconditionError(err PreconditionType) error {
name := xml.Name{"urn:ietf:params:xml:ns:carddav", string(err)}
elem := internal.NewRawXMLElement(name, nil, nil)
e := internal.Error{
Raw: []internal.RawXMLValue{
*elem,
return &internal.HTTPError{
Code: 409,
Err: &internal.Error{
Raw: []internal.RawXMLValue{*elem},
},
}
return &internal.DAVError{
Code: 409,
Msg: fmt.Sprintf("precondition not met: %s", string(err)),
Err: e,
}
}

View File

@ -103,14 +103,3 @@ func (err *HTTPError) Error() string {
func (err *HTTPError) Unwrap() error {
return err.Err
}
// DAVError is a XML error with HTTP status and a human readable message
type DAVError struct {
Code int
Msg string
Err Error
}
func (err *DAVError) Error() string {
return err.Msg
}

View File

@ -2,6 +2,7 @@ package internal
import (
"encoding/xml"
"errors"
"fmt"
"mime"
"net/http"
@ -10,16 +11,19 @@ import (
)
func ServeError(w http.ResponseWriter, err error) {
if davErr, ok := err.(*DAVError); ok {
w.WriteHeader(davErr.Code)
ServeXML(w).Encode(davErr.Err)
code := http.StatusInternalServerError
var httpErr *HTTPError
if errors.As(err, &httpErr) {
code = httpErr.Code
}
var errElt *Error
if errors.As(err, &errElt) {
w.WriteHeader(code)
ServeXML(w).Encode(errElt)
return
}
code := http.StatusInternalServerError
if httpErr, ok := err.(*HTTPError); ok {
code = httpErr.Code
}
http.Error(w, err.Error(), code)
}