Documentation
¶
Index ¶
- Constants
- func ErrorCode(err error) int
- func IsClientError(err error) bool
- func IsInformational(err error) bool
- func IsRedirection(err error) bool
- func IsServerError(err error) bool
- func IsSuccess(err error) bool
- func Message(err error) string
- func NilOrNotFound(err error) bool
- func NotFound(err error) bool
- func Report(err error)
- func ReportAndReturn(err error) error
- func RootCause(err error) error
- func Wrap(inner error, location string, message string, details ...any) error
- type Error
- func New(code int, location string, message string, details ...any) Error
- func NewBadRequestError(location string, message string, details ...any) Error
- func NewForbiddenError(location string, message string, details ...any) Error
- func NewInternalError(location string, message string, details ...any) Error
- func NewNotFoundError(location string, message string, details ...any) Error
- func NewUnauthorizedError(location string, message string, details ...any) Error
- func NewValidationError(message string, details ...any) Error
- type ErrorCodeGetter
- type MessageGetter
- type Option
- type Plugin
- type PluginList
- type Unwrapper
Examples ¶
Constants ¶
const ( // CodeBadRequestError indicates that the request is not properly formatted. // https://www.rfc-editor.org/rfc/rfc9110.html#name-400-bad-request CodeBadRequestError = 400 // https://www.rfc-editor.org/rfc/rfc9110.html#name-401-unauthorized CodeUnauthorizedError = 401 // CodeForbiddenError means that the current user does not have the required permissions to access the requested resource. // https://www.rfc-editor.org/rfc/rfc9110.html#name-403-forbidden CodeForbiddenError = 403 // CodeNotFoundError represents a request for a resource that does not exist, such as a database query that returns "not found" // https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found CodeNotFoundError = 404 // CodeValidationError retpresents a request that contains invalid data. // https://www.rfc-editor.org/rfc/rfc9110.html#name-422-unprocessable-content CodeValidationError = 422 // CodeInternalError represents a generic error message, given when an unexpected condition was encountered and no more specific message is suitable. // https://www.rfc-editor.org/rfc/rfc9110.html#name-500-internal-server-error CodeInternalError = 500 )
Variables ¶
This section is empty.
Functions ¶
func ErrorCode ¶ added in v0.16.0
ErrorCode returns an error code for any error. It tries to read the error code from objects matching the ErrorCodeGetter interface. If the provided error does not match this interface, then it assigns a generic "Internal Server Error" code 500.
func IsClientError ¶ added in v0.31.0
IsClientError returns TRUE if the error `Code` is a 4xx / Client Error error. https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_client_errors
func IsInformational ¶ added in v0.31.0
IsInformational returns TRUE if the error `Code` is a 1xx / Informational error. https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_informational_response
func IsRedirection ¶ added in v0.31.0
IsRedirection returns TRUE if the error `Code` is a 3xx / Redirection error. https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_redirection
func IsServerError ¶ added in v0.31.0
IsServerError returns TRUE if the error `Code` is a 5xx / Server Error error. https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_server_errors
func IsSuccess ¶ added in v0.31.0
IsSuccess returns TRUE if the error `Code` is a 2xx / Success error. https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_success
func NilOrNotFound ¶ added in v0.29.0
NilOrNotFound returns TRUE if the error is nil or a 404 / Not Found error. All other errors return FALSE
func NotFound ¶ added in v0.16.0
NotFound returns TRUE if the error `Code` is a 404 / Not Found error.
func Report ¶ added in v0.12.0
func Report(err error)
Report takes ANY error (hopefully a derp error) and attempts to report it via all configured error reporting mechanisms.
func ReportAndReturn ¶ added in v0.28.1
ReportAndReturn reports an error to the logger and also returns it to the caller.
func RootCause ¶ added in v0.13.0
RootCause digs into the error stack and returns the original error that caused the DERP
func Wrap ¶
Wrap encapsulates an existing derp.Error
Example ¶
// Derp errors can be nested, containing detailed information // about the entire call stack, with specifics about what went // wrong at every level innerErr := NewNotFoundError("Inner Function", "Original Error") middleErr := Wrap(innerErr, "Middleware Function", "Error calling 'innerErr'", "parameter", "list", "here") outerErr := Wrap(middleErr, "Error in Main Function", "Error calling 'middleErr'", "suspected", "cause", "of", "the", "error") Report(outerErr)
Output:
Example (StandardErrors) ¶
// Wrap also works with standard library errors // so you can add information to errors that are // exported by other packages that don't use derp. thisBreaks := func() error { return errors.New("Something failed") } // Try something that fails if err := thisBreaks(); err != nil { // Populate a derp.Error with everything you know about the error result := Wrap(err, "Example", "Something broke in `thisBreaks`", WithCode(404), "additional details go here") // Call .Report() to send an error to Ops. This is a system-wide // configuration that's set up during initialization. Report(result) }
Output:
Types ¶
type Error ¶
type Error struct { Code int `json:"code"` // Numeric error code (such as an HTTP status code) to report to the client. Location string `json:"location"` // Function name (or other location description) of where the error occurred Message string `json:"message"` // Primary (top-level) error message for this error TimeStamp int64 `json:"timestamp"` // Unix Epoch timestamp of the date/time when this error was created Details []any `json:"details,omitempty"` // Additional information related to this error message, such as parameters to the function that caused the error. WrappedValue error `json:"innerError,omitempty"` // An underlying error object used to identify the root cause of this error. }
Error represents a runtime error. It includes
func New ¶
New returns a new Error object
Example ¶
// Derp errors work anywhere that you use normal errors. // They just contain more information about what actually happened. // Here's how to create a new error to report back to a caller err := NewNotFoundError("Code Location", "Error Message", "additional details here", 12345, map[string]any{}) // Pluggable error reporting interface can dump errors to the console // or anywhere else that you want to send them. Report(err)
Output:
func NewBadRequestError ¶ added in v0.22.1
func NewForbiddenError ¶ added in v0.22.1
func NewInternalError ¶ added in v0.22.1
func NewNotFoundError ¶ added in v0.22.1
func NewUnauthorizedError ¶ added in v0.25.0
func NewValidationError ¶ added in v0.26.0
func (Error) Error ¶
Error implements the Error interface, which allows derp.Error objects to be used anywhere a standard error is used.
func (Error) GetErrorCode ¶ added in v0.31.0
ErrorCode returns the error Code embedded in this Error.
func (Error) GetMessage ¶ added in v0.31.0
ErrorMessage returns the error Message embedded in this Error.
type ErrorCodeGetter ¶ added in v0.16.0
type ErrorCodeGetter interface { // ErrorCode returns a numeric, application-specific code that references this error. // HTTP status codes are recommended, but not required GetErrorCode() int }
ErrorCodeGetter interface describes any error that can also "get" an error code value
type MessageGetter ¶ added in v0.20.0
type MessageGetter interface { // Message returns a human-friendly string representation of the error. GetMessage() string }
MessageGetter interface describes any error that can also report a "Message"
type Option ¶ added in v0.29.0
type Option func(*Error)
Option defines a function that modifies a derp.Error
func WithBadRequest ¶ added in v0.29.0
func WithBadRequest() Option
WithBadRequest returns an option that sets the derp.Error code to 400 (Bad Request)
func WithForbidden ¶ added in v0.29.0
func WithForbidden() Option
WithForbidden returns an option that sets the derp.Error code to 403 (Forbidden)
func WithInternalError ¶ added in v0.29.0
func WithInternalError() Option
WithInternalError returns an option that sets the derp.Error code to 500 (Internal Server Error)
func WithLocation ¶ added in v0.29.0
WithLocation returns an option that sets the derp.Error location
func WithMessage ¶ added in v0.31.0
WithMessage returns an option that sets the derp.Error message
func WithNotFound ¶ added in v0.29.0
func WithNotFound() Option
WithNotFound returns an option that sets the derp.Error code to 404 (Not Found)
func WithWrappedValue ¶ added in v0.29.0
WithWrappedValue returns an option that sets the derp.Error wrapped value
type Plugin ¶
type Plugin interface {
Report(error)
}
Plugin wraps the "Report" method, which reports a derp error to an external source. Reporters are responsible for handling and swallowing any errors they generate.
type PluginList ¶
type PluginList []Plugin
PluginList represents an array of plugins, which will be called in succession whenever the Error.Report() function is called.
var Plugins PluginList
Plugins is the array of objects that are able to report a derp when err.Report() is called.
func (PluginList) Add ¶
func (list PluginList) Add(plugin Plugin) PluginList
Add registers a new plugin to the system-wide configuration. This lets the developer configure and append additional plugins during initialization. It should be called during system startup only.
func (PluginList) Clear ¶
func (list PluginList) Clear() PluginList
Clear removes all plugins from the system-wide configuration. It is useful for removing the library default Console() from the list of plugins, in the event that you don't want to report errors to the console.