Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions httpclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func GetResponse(data any, method, url, auth string, headers []Header) (*http.Re
return response, ErrHttpClient{
Status: http.StatusBadRequest,
Message: ErrJSON,
Body: *response,
Body: http.Response{},
}
}
request, err = http.NewRequest(method, url, bytes.NewBuffer(payload))
Expand All @@ -82,7 +82,7 @@ func GetResponse(data any, method, url, auth string, headers []Header) (*http.Re
return response, ErrHttpClient{
Status: http.StatusBadRequest,
Message: ErrRequest,
Body: *response,
Body: http.Response{},
}
}
request.Header.Set("Content-Type", "application/json")
Expand All @@ -93,7 +93,7 @@ func GetResponse(data any, method, url, auth string, headers []Header) (*http.Re
return response, ErrHttpClient{
Status: http.StatusBadRequest,
Message: ErrRequest,
Body: *response,
Body: http.Response{},
}
}
}
Expand All @@ -114,18 +114,21 @@ func GetResponse(data any, method, url, auth string, headers []Header) (*http.Re
func GetJSON[T any, R any](data any, resp T, errResponse R, method, url, auth string, headers []Header) (T, R, error) {
response, err := GetResponse(data, method, url, auth, headers)
if err != nil {
return resp, errResponse, ErrHttpClient{
Status: response.StatusCode,
Message: fmt.Errorf("%w", err).Error(),
Body: *response,
if response != nil {
return resp, errResponse, ErrHttpClient{
Status: response.StatusCode,
Message: err.Error(),
Body: *response,
}
}
return resp, errResponse, err
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
if err := json.NewDecoder(response.Body).Decode(&errResponse); err != nil {
return resp, errResponse, ErrHttpClient{
Status: response.StatusCode,
Message: fmt.Errorf("json decode err with error response %w", err).Error(),
Message: fmt.Errorf("json decode err with error response %v", err).Error(),
Body: *response,
}
}
Expand All @@ -138,7 +141,7 @@ func GetJSON[T any, R any](data any, resp T, errResponse R, method, url, auth st
if err := json.NewDecoder(response.Body).Decode(&resp); err != nil {
return resp, errResponse, ErrHttpClient{
Status: response.StatusCode,
Message: fmt.Errorf("json decode err with response %w", err).Error(),
Message: fmt.Errorf("json decode err with response %v", err).Error(),
Body: *response,
}
}
Expand Down
14 changes: 14 additions & 0 deletions httpclient_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,17 @@ func TestGetJSON(t *testing.T) {
should.BeNil(t, errs)
})
}

type dummyStruct struct {
Value string `json:"value"`
}

func TestGetJSON_PanicOnNilResponse(t *testing.T) {
var resp dummyStruct
var errResp dummyStruct

_, _, err := GetJSON(nil, resp, errResp, "GET", ":", "", nil)

should.BeError(t, err)

}