diff --git a/README.md b/README.md
index 0469afc..08350eb 100644
--- a/README.md
+++ b/README.md
@@ -4,16 +4,12 @@
Features section describes in detail about Resty capabilities
-
-
-
-
Resty Communication Channels
-
+
## News
- * v2.15.0 [released](https://github.com/go-resty/resty/releases/tag/v2.15.0) and tagged on Sep 14, 2024.
+ * v2.15.2 [released](https://github.com/go-resty/resty/releases/tag/v2.15.2) and tagged on Sep 21, 2024.
* v2.0.0 [released](https://github.com/go-resty/resty/releases/tag/v2.0.0) and tagged on Jul 16, 2019.
* v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019.
* v1.0 released and tagged on Sep 25, 2017. - Resty's first version was released on Sep 15, 2015 then it grew gradually as a very handy and helpful library. Its been a two years since first release. I'm very thankful to Resty users and its [contributors](https://github.com/go-resty/resty/graphs/contributors).
@@ -109,7 +105,7 @@ Resty author also published following projects for Go Community.
```bash
# Go Modules
-require github.com/go-resty/resty/v2 v2.15.0
+require github.com/go-resty/resty/v2 v2.15.2
```
## Usage
diff --git a/client.go b/client.go
index a40bbe4..87a88da 100644
--- a/client.go
+++ b/client.go
@@ -1243,12 +1243,14 @@ func (c *Client) execute(req *Request) (*Response, error) {
}
if err != nil || req.notParseResponse || c.notParseResponse {
- logErr := responseLogger(c, response)
response.setReceivedAt()
+ if logErr := responseLogger(c, response); logErr != nil {
+ return response, wrapErrors(logErr, err)
+ }
if err != nil {
- return response, errors.Join(err, logErr)
+ return response, err
}
- return response, wrapNoRetryErr(logErr)
+ return response, nil
}
if !req.isSaveResponse {
@@ -1260,7 +1262,7 @@ func (c *Client) execute(req *Request) (*Response, error) {
if _, ok := body.(*gzip.Reader); !ok {
body, err = gzip.NewReader(body)
if err != nil {
- err = errors.Join(err, responseLogger(c, response))
+ err = wrapErrors(responseLogger(c, response), err)
response.setReceivedAt()
return response, err
}
@@ -1269,7 +1271,7 @@ func (c *Client) execute(req *Request) (*Response, error) {
}
if response.body, err = readAllWithLimit(body, req.responseBodyLimit); err != nil {
- err = errors.Join(err, responseLogger(c, response))
+ err = wrapErrors(responseLogger(c, response), err)
response.setReceivedAt()
return response, err
}
diff --git a/request_test.go b/request_test.go
index f220939..44bec45 100644
--- a/request_test.go
+++ b/request_test.go
@@ -1710,6 +1710,43 @@ func TestRequestDoNotParseResponse(t *testing.T) {
assertNil(t, resp.RawBody())
}
+func TestRequestDoNotParseResponseDebugLog(t *testing.T) {
+ ts := createGetServer(t)
+ defer ts.Close()
+
+ t.Run("do not parse response debug log client level", func(t *testing.T) {
+ c := dc().
+ SetDoNotParseResponse(true).
+ SetDebug(true)
+
+ var lgr bytes.Buffer
+ c.outputLogTo(&lgr)
+
+ _, err := c.R().
+ SetQueryParam("request_no", strconv.FormatInt(time.Now().Unix(), 10)).
+ Get(ts.URL + "/")
+
+ assertError(t, err)
+ assertEqual(t, true, strings.Contains(lgr.String(), "***** DO NOT PARSE RESPONSE - Enabled *****"))
+ })
+
+ t.Run("do not parse response debug log request level", func(t *testing.T) {
+ c := dc()
+
+ var lgr bytes.Buffer
+ c.outputLogTo(&lgr)
+
+ _, err := c.R().
+ SetDebug(true).
+ SetDoNotParseResponse(true).
+ SetQueryParam("request_no", strconv.FormatInt(time.Now().Unix(), 10)).
+ Get(ts.URL + "/")
+
+ assertError(t, err)
+ assertEqual(t, true, strings.Contains(lgr.String(), "***** DO NOT PARSE RESPONSE - Enabled *****"))
+ })
+}
+
type noCtTest struct {
Response string `json:"response"`
}
diff --git a/response.go b/response.go
index c3e4611..f52b5c6 100644
--- a/response.go
+++ b/response.go
@@ -171,6 +171,9 @@ func (r *Response) setReceivedAt() {
}
func (r *Response) fmtBodyString(sl int64) string {
+ if r.Request.client.notParseResponse || r.Request.notParseResponse {
+ return "***** DO NOT PARSE RESPONSE - Enabled *****"
+ }
if len(r.body) > 0 {
if int64(len(r.body)) > sl {
return fmt.Sprintf("***** RESPONSE TOO LARGE (size - %d) *****", len(r.body))
diff --git a/resty.go b/resty.go
index 1e4dadf..32b84f2 100644
--- a/resty.go
+++ b/resty.go
@@ -14,7 +14,7 @@ import (
)
// Version # of resty
-const Version = "2.15.0"
+const Version = "2.15.2"
// New method creates a new Resty client.
func New() *Client {
diff --git a/util.go b/util.go
index 812dce3..e1a66ff 100644
--- a/util.go
+++ b/util.go
@@ -357,6 +357,32 @@ func copyHeaders(hdrs http.Header) http.Header {
return nh
}
+func wrapErrors(n error, inner error) error {
+ if inner == nil {
+ return n
+ }
+ if n == nil {
+ return inner
+ }
+ return &restyError{
+ err: n,
+ inner: inner,
+ }
+}
+
+type restyError struct {
+ err error
+ inner error
+}
+
+func (e *restyError) Error() string {
+ return e.err.Error()
+}
+
+func (e *restyError) Unwrap() error {
+ return e.inner
+}
+
type noRetryErr struct {
err error
}
diff --git a/util_test.go b/util_test.go
index 6c030fd..4d0a888 100644
--- a/util_test.go
+++ b/util_test.go
@@ -6,6 +6,7 @@ package resty
import (
"bytes"
+ "errors"
"mime/multipart"
"testing"
)
@@ -89,3 +90,18 @@ func TestWriteMultipartFormFileReaderError(t *testing.T) {
assertNotNil(t, err)
assertEqual(t, "read error", err.Error())
}
+
+func TestRestyErrorFuncs(t *testing.T) {
+ ne1 := errors.New("new error 1")
+ nie1 := errors.New("inner error 1")
+
+ e := wrapErrors(ne1, nie1)
+ assertEqual(t, "new error 1", e.Error())
+ assertEqual(t, "inner error 1", errors.Unwrap(e).Error())
+
+ e = wrapErrors(ne1, nil)
+ assertEqual(t, "new error 1", e.Error())
+
+ e = wrapErrors(nil, nie1)
+ assertEqual(t, "inner error 1", e.Error())
+}