Skip to content

Commit ce7695b

Browse files
authored
fix: do not use errors.Join, just use custom error approach (#863)
1 parent 5d33e1a commit ce7695b

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

client.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -1243,12 +1243,14 @@ func (c *Client) execute(req *Request) (*Response, error) {
12431243
}
12441244

12451245
if err != nil || req.notParseResponse || c.notParseResponse {
1246-
logErr := responseLogger(c, response)
12471246
response.setReceivedAt()
1247+
if logErr := responseLogger(c, response); logErr != nil {
1248+
return response, wrapErrors(logErr, err)
1249+
}
12481250
if err != nil {
1249-
return response, errors.Join(err, logErr)
1251+
return response, err
12501252
}
1251-
return response, wrapNoRetryErr(logErr)
1253+
return response, nil
12521254
}
12531255

12541256
if !req.isSaveResponse {
@@ -1260,7 +1262,7 @@ func (c *Client) execute(req *Request) (*Response, error) {
12601262
if _, ok := body.(*gzip.Reader); !ok {
12611263
body, err = gzip.NewReader(body)
12621264
if err != nil {
1263-
err = errors.Join(err, responseLogger(c, response))
1265+
err = wrapErrors(responseLogger(c, response), err)
12641266
response.setReceivedAt()
12651267
return response, err
12661268
}
@@ -1269,7 +1271,7 @@ func (c *Client) execute(req *Request) (*Response, error) {
12691271
}
12701272

12711273
if response.body, err = readAllWithLimit(body, req.responseBodyLimit); err != nil {
1272-
err = errors.Join(err, responseLogger(c, response))
1274+
err = wrapErrors(responseLogger(c, response), err)
12731275
response.setReceivedAt()
12741276
return response, err
12751277
}

util.go

+26
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,32 @@ func copyHeaders(hdrs http.Header) http.Header {
357357
return nh
358358
}
359359

360+
func wrapErrors(n error, inner error) error {
361+
if inner == nil {
362+
return n
363+
}
364+
if n == nil {
365+
return inner
366+
}
367+
return &restyError{
368+
err: n,
369+
inner: inner,
370+
}
371+
}
372+
373+
type restyError struct {
374+
err error
375+
inner error
376+
}
377+
378+
func (e *restyError) Error() string {
379+
return e.err.Error()
380+
}
381+
382+
func (e *restyError) Unwrap() error {
383+
return e.inner
384+
}
385+
360386
type noRetryErr struct {
361387
err error
362388
}

util_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package resty
66

77
import (
88
"bytes"
9+
"errors"
910
"mime/multipart"
1011
"testing"
1112
)
@@ -89,3 +90,18 @@ func TestWriteMultipartFormFileReaderError(t *testing.T) {
8990
assertNotNil(t, err)
9091
assertEqual(t, "read error", err.Error())
9192
}
93+
94+
func TestRestyErrorFuncs(t *testing.T) {
95+
ne1 := errors.New("new error 1")
96+
nie1 := errors.New("inner error 1")
97+
98+
e := wrapErrors(ne1, nie1)
99+
assertEqual(t, "new error 1", e.Error())
100+
assertEqual(t, "inner error 1", errors.Unwrap(e).Error())
101+
102+
e = wrapErrors(ne1, nil)
103+
assertEqual(t, "new error 1", e.Error())
104+
105+
e = wrapErrors(nil, nie1)
106+
assertEqual(t, "inner error 1", e.Error())
107+
}

0 commit comments

Comments
 (0)