MCPcopy Create free account
hub / github.com/cli/cli / parseErrorResponse

Function parseErrorResponse

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

Source from the content-addressed store, hash-verified

649}
650
651func parseErrorResponse(r io.Reader, statusCode int) (io.Reader, string, error) {
652 bodyCopy := &bytes.Buffer{}
653 b, err := io.ReadAll(io.TeeReader(r, bodyCopy))
654 if err != nil {
655 return r, "", err
656 }
657
658 var parsedBody struct {
659 Message string
660 Errors json.RawMessage
661 }
662 err = json.Unmarshal(b, &parsedBody)
663 if err != nil {
664 return bodyCopy, "", err
665 }
666
667 if len(parsedBody.Errors) > 0 && parsedBody.Errors[0] == '"' {
668 var stringError string
669 if err := json.Unmarshal(parsedBody.Errors, &stringError); err != nil {
670 return bodyCopy, "", err
671 }
672 if stringError != "" {
673 if parsedBody.Message != "" {
674 return bodyCopy, fmt.Sprintf("%s (%s)", stringError, parsedBody.Message), nil
675 }
676 return bodyCopy, stringError, nil
677 }
678 }
679
680 if parsedBody.Message != "" {
681 return bodyCopy, fmt.Sprintf("%s (HTTP %d)", parsedBody.Message, statusCode), nil
682 }
683
684 if len(parsedBody.Errors) == 0 || parsedBody.Errors[0] != '[' {
685 return bodyCopy, "", nil
686 }
687
688 var errorObjects []json.RawMessage
689 if err := json.Unmarshal(parsedBody.Errors, &errorObjects); err != nil {
690 return bodyCopy, "", err
691 }
692
693 var objectError struct {
694 Message string
695 }
696 var errors []string
697 for _, rawErr := range errorObjects {
698 if len(rawErr) == 0 {
699 continue
700 }
701 if rawErr[0] == '{' {
702 err := json.Unmarshal(rawErr, &objectError)
703 if err != nil {
704 return bodyCopy, "", err
705 }
706 errors = append(errors, objectError.Message)
707 } else if rawErr[0] == '"' {
708 var stringError string

Callers 2

processResponseFunction · 0.85
Test_parseErrorResponseFunction · 0.85

Calls 1

JoinMethod · 0.80

Tested by 1

Test_parseErrorResponseFunction · 0.68