Skip to content

Commit

Permalink
Merge pull request #43 from manicminer/bugfix/odata-error-handling
Browse files Browse the repository at this point in the history
Handle bad API responses when parsing OData errors
  • Loading branch information
manicminer authored May 11, 2021
2 parents f5522ec + c90a49b commit 3be03b7
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 8 deletions.
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
Expand Down Expand Up @@ -36,7 +35,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
Expand Down
11 changes: 5 additions & 6 deletions odata/odata.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,17 @@ func (e *Error) UnmarshalJSON(data []byte) error {
*e = Error(e2)

// Unmarshal the message, which can be a plain string or an object wrapping a message
if e.RawMessage != nil {
raw := *e.RawMessage
switch string(raw[0]) {
if raw := e.RawMessage; raw != nil && len(*raw) > 0 {
switch string((*raw)[0]) {
case "\"":
var s string
if err := json.Unmarshal(raw, &s); err != nil {
if err := json.Unmarshal(*raw, &s); err != nil {
return err
}
e.Message = &s
case "{":
var m map[string]interface{}
if err := json.Unmarshal(raw, &m); err != nil {
if err := json.Unmarshal(*raw, &m); err != nil {
return err
}
if v, ok := m["value"]; ok {
Expand All @@ -103,7 +102,7 @@ func (e *Error) UnmarshalJSON(data []byte) error {
}
}
default:
return fmt.Errorf("unrecognised error message: %#v", string(raw))
return fmt.Errorf("unrecognised error message: %#v", string(*raw))
}
}
return nil
Expand Down

0 comments on commit 3be03b7

Please sign in to comment.