From bf8749c5cf4582af95a160a8c808da50dbe48754 Mon Sep 17 00:00:00 2001 From: Till Westpfahl Date: Fri, 15 Aug 2025 10:01:19 +0200 Subject: [PATCH 1/2] feat: add handling for 'commonsv2.Error' as default error --- pkg/httperr/default_error.go | 32 ++++++++++++++++++++++++++++++++ pkg/httperr/from_response.go | 4 ++++ 2 files changed, 36 insertions(+) create mode 100644 pkg/httperr/default_error.go diff --git a/pkg/httperr/default_error.go b/pkg/httperr/default_error.go new file mode 100644 index 00000000..dad9dabe --- /dev/null +++ b/pkg/httperr/default_error.go @@ -0,0 +1,32 @@ +package httperr + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/mittwald/api-client-go/mittwaldv2/generated/schemas/commonsv2" +) + +func IsDefaultErrorResponse(res *http.Response) (*commonsv2.Error, bool) { + target := commonsv2.Error{} + + if err := json.NewDecoder(res.Body).Decode(&target); err != nil { + return nil, false + } + + return &target, true +} + +// ErrDefault represents the default fallback error used in the mittwald api. +type ErrDefault struct { + Response *http.Response + DefaultError *commonsv2.Error +} + +func (e *ErrDefault) Error() string { + if e.DefaultError != nil { + return fmt.Sprintf("%s: %s", e.DefaultError.Type, e.DefaultError.Message) + } + return "unexpected default error: " +} diff --git a/pkg/httperr/from_response.go b/pkg/httperr/from_response.go index 061985bf..7328135d 100644 --- a/pkg/httperr/from_response.go +++ b/pkg/httperr/from_response.go @@ -18,6 +18,10 @@ func ErrFromResponse(res *http.Response) error { } return &ErrBadRequest{Response: res} default: + if defaultError, isDefaultError := IsDefaultErrorResponse(res); isDefaultError { + return &ErrDefault{Response: res, DefaultError: defaultError} + } + return &ErrUnexpectedResponse{Response: res} } } From c41b6094e0283bbf6c5ee70e2e226aff8b25679e Mon Sep 17 00:00:00 2001 From: Till Westpfahl <78540379+tillwestpfahl@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:06:41 +0200 Subject: [PATCH 2/2] feat: ensure defaultError has values Co-authored-by: Martin Helmich --- pkg/httperr/default_error.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/httperr/default_error.go b/pkg/httperr/default_error.go index dad9dabe..da87f766 100644 --- a/pkg/httperr/default_error.go +++ b/pkg/httperr/default_error.go @@ -14,6 +14,10 @@ func IsDefaultErrorResponse(res *http.Response) (*commonsv2.Error, bool) { if err := json.NewDecoder(res.Body).Decode(&target); err != nil { return nil, false } + + if target.Type == "" || target.Message == "" { + return nil, false + } return &target, true }