github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/cf/errors/http_error.go (about)

     1  package errors
     2  
     3  import (
     4  	"fmt"
     5  
     6  	. "code.cloudfoundry.org/cli/cf/i18n"
     7  )
     8  
     9  //go:generate counterfeiter . HTTPError
    10  
    11  type HTTPError interface {
    12  	Error() string
    13  	StatusCode() int   // actual HTTP status code
    14  	ErrorCode() string // error code returned in response body from CC or UAA
    15  }
    16  
    17  type baseHTTPError struct {
    18  	statusCode   int
    19  	apiErrorCode string
    20  	description  string
    21  }
    22  
    23  type HTTPNotFoundError struct {
    24  	baseHTTPError
    25  }
    26  
    27  func NewHTTPError(statusCode int, code string, description string) error {
    28  	err := baseHTTPError{
    29  		statusCode:   statusCode,
    30  		apiErrorCode: code,
    31  		description:  description,
    32  	}
    33  	switch statusCode {
    34  	case 404:
    35  		return &HTTPNotFoundError{err}
    36  	default:
    37  		return &err
    38  	}
    39  }
    40  
    41  func (err *baseHTTPError) StatusCode() int {
    42  	return err.statusCode
    43  }
    44  
    45  func (err *baseHTTPError) Error() string {
    46  	return fmt.Sprintf(T("Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrAPIErrorCode}}, message: {{.ErrDescription}}",
    47  		map[string]interface{}{"ErrStatusCode": err.statusCode,
    48  			"ErrAPIErrorCode": err.apiErrorCode,
    49  			"ErrDescription":  err.description}),
    50  	)
    51  }
    52  
    53  func (err *baseHTTPError) ErrorCode() string {
    54  	return err.apiErrorCode
    55  }