MCPcopy
hub / github.com/cli/cli / parseErrorResponse

Function parseErrorResponse

pkg/cmd/api/api.go:629–700  ·  view source on GitHub ↗
(r io.Reader, statusCode int)

Source from the content-addressed store, hash-verified

627}
628
629func parseErrorResponse(r io.Reader, statusCode int) (io.Reader, string, error) {
630 bodyCopy := &bytes.Buffer{}
631 b, err := io.ReadAll(io.TeeReader(r, bodyCopy))
632 if err != nil {
633 return r, "", err
634 }
635
636 var parsedBody struct {
637 Message string
638 Errors json.RawMessage
639 }
640 err = json.Unmarshal(b, &parsedBody)
641 if err != nil {
642 return bodyCopy, "", err
643 }
644
645 if len(parsedBody.Errors) > 0 && parsedBody.Errors[0] == '"' {
646 var stringError string
647 if err := json.Unmarshal(parsedBody.Errors, &stringError); err != nil {
648 return bodyCopy, "", err
649 }
650 if stringError != "" {
651 if parsedBody.Message != "" {
652 return bodyCopy, fmt.Sprintf("%s (%s)", stringError, parsedBody.Message), nil
653 }
654 return bodyCopy, stringError, nil
655 }
656 }
657
658 if parsedBody.Message != "" {
659 return bodyCopy, fmt.Sprintf("%s (HTTP %d)", parsedBody.Message, statusCode), nil
660 }
661
662 if len(parsedBody.Errors) == 0 || parsedBody.Errors[0] != '[' {
663 return bodyCopy, "", nil
664 }
665
666 var errorObjects []json.RawMessage
667 if err := json.Unmarshal(parsedBody.Errors, &errorObjects); err != nil {
668 return bodyCopy, "", err
669 }
670
671 var objectError struct {
672 Message string
673 }
674 var errors []string
675 for _, rawErr := range errorObjects {
676 if len(rawErr) == 0 {
677 continue
678 }
679 if rawErr[0] == '{' {
680 err := json.Unmarshal(rawErr, &objectError)
681 if err != nil {
682 return bodyCopy, "", err
683 }
684 errors = append(errors, objectError.Message)
685 } else if rawErr[0] == '"' {
686 var stringError string

Callers 2

processResponseFunction · 0.85
Test_parseErrorResponseFunction · 0.85

Calls 1

JoinMethod · 0.80

Tested by 1

Test_parseErrorResponseFunction · 0.68