From 1c71a7a1c463bacd99bf4787483aa2027128b71b Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 31 May 2022 17:04:44 +0200 Subject: [PATCH] internal: add more context to Response.DecodeProp errors --- internal/elements.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/internal/elements.go b/internal/elements.go index 6bcd6a0..48ab72e 100644 --- a/internal/elements.go +++ b/internal/elements.go @@ -177,7 +177,7 @@ func (resp *Response) DecodeProp(values ...interface{}) error { return err } if err := resp.Err(); err != nil { - return err + return newPropError(name, err) } for _, propstat := range resp.Propstats { raw := propstat.Prop.Get(name) @@ -185,16 +185,26 @@ func (resp *Response) DecodeProp(values ...interface{}) error { continue } if err := propstat.Status.Err(); err != nil { - return err + return newPropError(name, err) } - return raw.Decode(v) + if err := raw.Decode(v); err != nil { + return newPropError(name, err) + } + return nil } - return HTTPErrorf(http.StatusNotFound, "missing property %s", name) + return newPropError(name, &HTTPError{ + Code: http.StatusNotFound, + Err: fmt.Errorf("missing property"), + }) } return nil } +func newPropError(name xml.Name, err error) error { + return fmt.Errorf("property <%v %v>: %w", name.Space, name.Local, err) +} + func (resp *Response) EncodeProp(code int, v interface{}) error { raw, err := EncodeRawXMLElement(v) if err != nil {