@@ -540,36 +540,58 @@ func parseErrorResponse(r io.Reader, statusCode int) (io.Reader, string, error)
540540
541541 var parsedBody struct {
542542 Message string
543- Errors [] json.RawMessage
543+ Errors json.RawMessage
544544 }
545545 err = json .Unmarshal (b , & parsedBody )
546546 if err != nil {
547- return r , "" , err
547+ return bodyCopy , "" , err
548+ }
549+
550+ if len (parsedBody .Errors ) > 0 && parsedBody .Errors [0 ] == '"' {
551+ var stringError string
552+ if err := json .Unmarshal (parsedBody .Errors , & stringError ); err != nil {
553+ return bodyCopy , "" , err
554+ }
555+ if stringError != "" {
556+ if parsedBody .Message != "" {
557+ return bodyCopy , fmt .Sprintf ("%s (%s)" , stringError , parsedBody .Message ), nil
558+ }
559+ return bodyCopy , stringError , nil
560+ }
548561 }
562+
549563 if parsedBody .Message != "" {
550564 return bodyCopy , fmt .Sprintf ("%s (HTTP %d)" , parsedBody .Message , statusCode ), nil
551565 }
552566
553- type errorMessage struct {
567+ if len (parsedBody .Errors ) == 0 || parsedBody .Errors [0 ] != '[' {
568+ return bodyCopy , "" , nil
569+ }
570+
571+ var errorObjects []json.RawMessage
572+ if err := json .Unmarshal (parsedBody .Errors , & errorObjects ); err != nil {
573+ return bodyCopy , "" , err
574+ }
575+
576+ var objectError struct {
554577 Message string
555578 }
556579 var errors []string
557- for _ , rawErr := range parsedBody . Errors {
580+ for _ , rawErr := range errorObjects {
558581 if len (rawErr ) == 0 {
559582 continue
560583 }
561584 if rawErr [0 ] == '{' {
562- var objectError errorMessage
563585 err := json .Unmarshal (rawErr , & objectError )
564586 if err != nil {
565- return r , "" , err
587+ return bodyCopy , "" , err
566588 }
567589 errors = append (errors , objectError .Message )
568590 } else if rawErr [0 ] == '"' {
569591 var stringError string
570592 err := json .Unmarshal (rawErr , & stringError )
571593 if err != nil {
572- return r , "" , err
594+ return bodyCopy , "" , err
573595 }
574596 errors = append (errors , stringError )
575597 }
0 commit comments