var ( // ErrorCodeUnknown is a generic error that can be used as a last // resort if there is no situation-specific error message that can be used ErrorCodeUnknown = Register("errcode", ErrorDescriptor{ Value: "UNKNOWN", Message: "unknown error", Description: `Generic error returned when the error does not have an API classification.`, HTTPStatusCode: http.StatusInternalServerError, }) // ErrorCodeUnsupported is returned when an operation is not supported. ErrorCodeUnsupported = Register("errcode", ErrorDescriptor{ Value: "UNSUPPORTED", Message: "The operation is unsupported.", Description: `The operation was unsupported due to a missing implementation or invalid set of parameters.`, HTTPStatusCode: http.StatusMethodNotAllowed, }) // ErrorCodeUnauthorized is returned if a request requires // authentication. = Register("errcode", ErrorDescriptor{ Value: "UNAUTHORIZED", Message: "authentication required", Description: `The access controller was unable to authenticate the client. Often this will be accompanied by a Www-Authenticate HTTP response header indicating how to authenticate.`, HTTPStatusCode: http.StatusUnauthorized, }) // ErrorCodeDenied is returned if a client does not have sufficient // permission to perform an action. ErrorCodeDenied = Register("errcode", ErrorDescriptor{ Value: "DENIED", Message: "requested access to the resource is denied", Description: `The access controller denied access for the operation on a resource.`, HTTPStatusCode: http.StatusForbidden, }) // ErrorCodeUnavailable provides a common error to report unavailability // of a service or endpoint. = Register("errcode", ErrorDescriptor{ Value: "UNAVAILABLE", Message: "service unavailable", Description: "Returned when a service is not available", HTTPStatusCode: http.StatusServiceUnavailable, }) // ErrorCodeTooManyRequests is returned if a client attempts too many // times to contact a service endpoint. ErrorCodeTooManyRequests = Register("errcode", ErrorDescriptor{ Value: "TOOMANYREQUESTS", Message: "too many requests", Description: `Returned when a client attempts to contact a service too many times`, HTTPStatusCode: http.StatusTooManyRequests, }) )
func GetGroupNames() []string
GetGroupNames returns the list of Error group names that are registered
func ServeJSON(w http.ResponseWriter, err error) error
ServeJSON attempts to serve the errcode in a JSON envelope. It marshals err and sets the content-type header to 'application/json'. It will handle ErrorCoder and Errors, and if necessary will create an envelope.
Error provides a wrapper around ErrorCode with extra Details provided.
type Error struct { Code ErrorCode `json:"code"` Message string `json:"message"` Detail interface{} `json:"detail,omitempty"` }
func (e Error) Error() string
Error returns a human readable representation of the error.
func (e Error) ErrorCode() ErrorCode
ErrorCode returns the ID/Value of this Error
func (e Error) WithArgs(args ...interface{}) Error
WithArgs uses the passed-in list of interface{} as the substitution variables in the Error's Message string, but returns a new Error
func (e Error) WithDetail(detail interface{}) Error
WithDetail will return a new Error, based on the current one, but with some Detail info added
ErrorCode represents the error type. The errors are serialized via strings and the integer format may change and should *never* be exported.
type ErrorCode int
func ParseErrorCode(value string) ErrorCode
ParseErrorCode returns the value by the string error code. `ErrorCodeUnknown` will be returned if the error is not known.
func Register(group string, descriptor ErrorDescriptor) ErrorCode
Register will make the passed-in error known to the environment and return a new ErrorCode
func (ec ErrorCode) Descriptor() ErrorDescriptor
Descriptor returns the descriptor for the error code.
func (ec ErrorCode) Error() string
Error returns the ID/Value
func (ec ErrorCode) ErrorCode() ErrorCode
ErrorCode just returns itself
func (ec ErrorCode) MarshalText() (text []byte, err error)
MarshalText encodes the receiver into UTF-8-encoded text and returns the result.
func (ec ErrorCode) Message() string
Message returned the human-readable error message for this error code.
func (ec ErrorCode) String() string
String returns the canonical identifier for this error code.
func (ec *ErrorCode) UnmarshalText(text []byte) error
UnmarshalText decodes the form generated by MarshalText.
func (ec ErrorCode) WithArgs(args ...interface{}) Error
WithArgs creates a new Error struct and sets the Args slice
func (ec ErrorCode) WithDetail(detail interface{}) Error
WithDetail creates a new Error struct based on the passed-in info and set the Detail property appropriately
func (ec ErrorCode) WithMessage(message string) Error
WithMessage creates a new Error struct based on the passed-in info and overrides the Message property.
ErrorCoder is the base interface for ErrorCode and Error allowing users of each to just call ErrorCode to get the real ID of each
type ErrorCoder interface { ErrorCode() ErrorCode }
ErrorDescriptor provides relevant information about a given error code.
type ErrorDescriptor struct { // Code is the error code that this descriptor describes. Code ErrorCode // Value provides a unique, string key, often captilized with // underscores, to identify the error code. This value is used as the // keyed value when serializing api errors. Value string // Message is a short, human readable decription of the error condition // included in API responses. Message string // Description provides a complete account of the errors purpose, suitable // for use in documentation. Description string // HTTPStatusCode provides the http status code that is associated with // this error condition. HTTPStatusCode int }
func GetErrorAllDescriptors() []ErrorDescriptor
GetErrorAllDescriptors returns a slice of all ErrorDescriptors that are registered, irrespective of what group they're in
func GetErrorCodeGroup(name string) []ErrorDescriptor
GetErrorCodeGroup returns the named group of error descriptors
Errors provides the envelope for multiple errors and a few sugar methods for use within the application.
type Errors []error
func (errs Errors) Error() string
func (errs Errors) Len() int
Len returns the current number of errors.
func (errs Errors) MarshalJSON() ([]byte, error)
MarshalJSON converts slice of error, ErrorCode or Error into a slice of Error - then serializes
func (errs *Errors) UnmarshalJSON(data []byte) error
UnmarshalJSON deserializes []Error and then converts it into slice of Error or ErrorCode