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

Function parseErrorResponse

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

Source from the content-addressed store, hash-verified

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

Callers 2

processResponseFunction · 0.85
Test_parseErrorResponseFunction · 0.85

Calls 1

JoinMethod · 0.80

Tested by 1

Test_parseErrorResponseFunction · 0.68