Skip to content

Commit 1009ace

Browse files
committed
Improved handling client level SetError option and pointer option
1 parent af2fa35 commit 1009ace

File tree

4 files changed

+17
-10
lines changed

4 files changed

+17
-10
lines changed

client.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ type Client struct {
7878
UserInfo *User
7979
Token string
8080
Cookies []*http.Cookie
81-
Error interface{}
81+
Error reflect.Type
8282
Debug bool
8383
Log *log.Logger
8484

@@ -354,7 +354,12 @@ func (c *Client) SetContentLength(l bool) *Client {
354354
// resty.SetError(Error{})
355355
//
356356
func (c *Client) SetError(err interface{}) *Client {
357-
c.Error = getPointer(err)
357+
t := reflect.TypeOf(err)
358+
if t.Kind() == reflect.Ptr {
359+
c.Error = t.Elem()
360+
} else {
361+
c.Error = t
362+
}
358363
return c
359364
}
360365

@@ -1050,9 +1055,9 @@ func getResponseBodyString(res *Response) string {
10501055
}
10511056

10521057
func getPointer(v interface{}) interface{} {
1053-
rv := reflect.ValueOf(v)
1058+
rv := reflect.TypeOf(v)
10541059
if rv.Kind() != reflect.Ptr {
1055-
return reflect.New(rv.Type()).Interface()
1060+
return reflect.New(rv).Interface()
10561061
}
10571062

10581063
return v

middleware.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func parseResponseBody(c *Client, res *Response) (err error) {
269269
if res.StatusCode() > 399 {
270270
// global error interface
271271
if res.Request.Error == nil && c.Error != nil {
272-
res.Request.Error = c.Error
272+
res.Request.Error = reflect.New(c.Error).Interface()
273273
}
274274

275275
if res.Request.Error != nil {

resty.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ Package resty provides simple HTTP and REST client for Go inspired by Ruby rest-
99
package resty
1010

1111
// go-resty version no
12-
var Version = "0.2.1"
12+
var Version = "0.2.2"

resty_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,12 @@ func TestPostXMLStructInvalidLogin(t *testing.T) {
314314
ts := createPostServer(t)
315315
defer ts.Close()
316316

317-
resp, err := dclr().
317+
c := dc()
318+
c.SetError(&AuthError{})
319+
320+
resp, err := c.R().
318321
SetHeader(hdrContentTypeKey, "application/xml").
319322
SetBody(User{Username: "testuser", Password: "testpass1"}).
320-
SetError(&AuthError{}).
321323
Post(ts.URL + "/login")
322324

323325
assertError(t, err)
@@ -405,7 +407,7 @@ func TestRequestBasicAuthFail(t *testing.T) {
405407

406408
c := dc()
407409
c.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}).
408-
SetError(&AuthError{})
410+
SetError(AuthError{})
409411

410412
resp, err := c.R().
411413
SetBasicAuth("myuser", "basicauth1").
@@ -880,7 +882,7 @@ func TestClientOptions(t *testing.T) {
880882

881883
err := &AuthError{}
882884
SetError(err)
883-
if err != DefaultClient.Error {
885+
if reflect.TypeOf(err) == DefaultClient.Error {
884886
t.Error("SetError failed")
885887
}
886888

0 commit comments

Comments
 (0)