Skip to content

Commit bfd294c

Browse files
authored
Merge pull request #59 from ekeyme/enhance/error-enrich
enrich error on io.EOF error from json.decode for membership api
2 parents 18da313 + 8ed0d82 commit bfd294c

File tree

3 files changed

+24
-26
lines changed

3 files changed

+24
-26
lines changed

client.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package redmine
22

33
import (
4+
"encoding/json"
5+
"errors"
46
"fmt"
7+
"io"
58
"net/http"
69
"net/url"
710
"strconv"
11+
"strings"
812
)
913

1014
type Client struct {
@@ -56,6 +60,20 @@ type errorsResult struct {
5660
Errors []string `json:"errors"`
5761
}
5862

63+
func errorFromResp(bodyDecoder *json.Decoder, httpStatus int) (err error) {
64+
var er errorsResult
65+
err = bodyDecoder.Decode(&er)
66+
if err == nil { /* error from redmine */
67+
return errors.New(strings.Join(er.Errors, "\n"))
68+
}
69+
70+
if err == io.EOF { /* empty body */
71+
err = errors.New(http.StatusText(httpStatus))
72+
}
73+
74+
return
75+
}
76+
5977
type IdName struct {
6078
Id int `json:"id"`
6179
Name string `json:"name"`

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ module github.com/mattn/go-redmine
22

33
go 1.13
44

5-
require github.com/mattn/go-shellwords v1.0.12 // indirect
5+
require github.com/mattn/go-shellwords v1.0.12

membership.go

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,7 @@ func (c *Client) Memberships(projectId int) ([]Membership, error) {
4141
return nil, errors.New("Not Found")
4242
}
4343
if res.StatusCode != 200 {
44-
var er errorsResult
45-
err = decoder.Decode(&er)
46-
if err == nil {
47-
err = errors.New(strings.Join(er.Errors, "\n"))
48-
}
44+
err = errorFromResp(decoder, res.StatusCode)
4945
} else {
5046
err = decoder.Decode(&r)
5147
}
@@ -68,11 +64,7 @@ func (c *Client) Membership(id int) (*Membership, error) {
6864
return nil, errors.New("Not Found")
6965
}
7066
if res.StatusCode != 200 {
71-
var er errorsResult
72-
err = decoder.Decode(&er)
73-
if err == nil {
74-
err = errors.New(strings.Join(er.Errors, "\n"))
75-
}
67+
err = errorFromResp(decoder, res.StatusCode)
7668
} else {
7769
err = decoder.Decode(&r)
7870
}
@@ -103,11 +95,7 @@ func (c *Client) CreateMembership(membership Membership) (*Membership, error) {
10395
decoder := json.NewDecoder(res.Body)
10496
var r membershipRequest
10597
if res.StatusCode != 201 {
106-
var er errorsResult
107-
err = decoder.Decode(&er)
108-
if err == nil {
109-
err = errors.New(strings.Join(er.Errors, "\n"))
110-
}
98+
err = errorFromResp(decoder, res.StatusCode)
11199
} else {
112100
err = decoder.Decode(&r)
113101
}
@@ -140,11 +128,7 @@ func (c *Client) UpdateMembership(membership Membership) error {
140128
}
141129
if res.StatusCode != 200 {
142130
decoder := json.NewDecoder(res.Body)
143-
var er errorsResult
144-
err = decoder.Decode(&er)
145-
if err == nil {
146-
err = errors.New(strings.Join(er.Errors, "\n"))
147-
}
131+
err = errorFromResp(decoder, res.StatusCode)
148132
}
149133
if err != nil {
150134
return err
@@ -170,11 +154,7 @@ func (c *Client) DeleteMembership(id int) error {
170154

171155
decoder := json.NewDecoder(res.Body)
172156
if res.StatusCode != 200 {
173-
var er errorsResult
174-
err = decoder.Decode(&er)
175-
if err == nil {
176-
err = errors.New(strings.Join(er.Errors, "\n"))
177-
}
157+
err = errorFromResp(decoder, res.StatusCode)
178158
}
179159
return err
180160
}

0 commit comments

Comments
 (0)