Skip to content

Commit f2e7c9b

Browse files
author
tsidei
authored
Merge pull request #80 from mailjet/60-structured-error
Structured error response
2 parents b7646dd + d5f92d9 commit f2e7c9b

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

core.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,14 +249,24 @@ func (c *HTTPClient) doRequest(req *http.Request) (resp *http.Response, err erro
249249
func checkResponseError(resp *http.Response) error {
250250
if resp.StatusCode < 200 || resp.StatusCode >= 400 {
251251
var mailjetErr RequestError
252-
err := json.NewDecoder(resp.Body).Decode(&mailjetErr)
252+
mailjetErr.StatusCode = resp.StatusCode
253253

254+
b, err := io.ReadAll(resp.Body)
254255
if err != nil {
255-
return fmt.Errorf("Unexpected server response code: %d: %s", resp.StatusCode, err)
256+
mailjetErr.ErrorMessage = "unable to read response body"
257+
mailjetErr.ErrorInfo = err.Error()
258+
return mailjetErr
256259
}
257-
return fmt.Errorf("Unexpected server response code: %d: %s (%s)",
258-
resp.StatusCode, mailjetErr.ErrorMessage, mailjetErr.ErrorInfo)
260+
261+
err = json.Unmarshal(b, &mailjetErr)
262+
if err != nil {
263+
mailjetErr.ErrorMessage = "unexpected server response: %s" + string(b)
264+
mailjetErr.ErrorInfo = "json unmarshal error: " + err.Error()
265+
return mailjetErr
266+
}
267+
return mailjetErr
259268
}
269+
260270
return nil
261271
}
262272

mailjet_resources.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package mailjet
22

33
import (
4+
"fmt"
45
"net/http"
56
"net/textproto"
67
"sync"
@@ -69,6 +70,10 @@ type RequestError struct {
6970
StatusCode int
7071
}
7172

73+
func (e RequestError) Error() string {
74+
return fmt.Sprintf("Unexpected server response code: %d: %s (%s)", e.StatusCode, e.ErrorMessage, e.ErrorInfo)
75+
}
76+
7277
// RequestErrorV31 is the error returned by the API.
7378
type RequestErrorV31 struct {
7479
ErrorInfo string

0 commit comments

Comments
 (0)