Skip to content

Latest commit

 

History

History
74 lines (61 loc) · 1.99 KB

README.md

File metadata and controls

74 lines (61 loc) · 1.99 KB

Errors Utility

This package provides utility methods for error handling in Go, such as error types, context, pointer, and detail. The utility methods build on the functionality in github.com/pkg/errors.

Examples

Create a new error of a specific type, with detail:

doc, err := jsonapi.DecodeRequest(r, "account", req)
if err != nil {
  return errors.BadRequest.NewWithDetail("Invalid request body")
}

Wrap an error:

err := errors.New("an_error")
err = errors.AddErrorContext(err, "field", "value")
wrappedErr := errors.BadRequest.Wrapf(err, "error %s", "1")

Handle errors of specific types with pointer/detail:

switch errors.GetType(err) {
case errors.NotFound:
  status = http.StatusNotFound
  title = "Not Found"
case errors.InvalidParameter:
  status = http.StatusBadRequest
  title = "Invalid Parameter"
case errors.MissingParameter:
  status = http.StatusBadRequest
  title = "Missing Parameter"
case errors.Validation, errors.Public:
  title = "Resource Invalid"
  status = http.StatusUnprocessableEntity
case errors.BadRequest:
  title = "Bad Request"
  status = http.StatusBadRequest
case errors.Forbidden:
  title = "Forbidden"
  status = http.StatusForbidden
default:
  status = http.StatusInternalServerError
  title = "Internal Server Error"
}
pointer := errors.Pointer(err)
detail := errors.Detail(err)

Add/retrieve error context:

err := errors.BadRequest.New("an_error")
errWithContext := errors.AddErrorContext(err, "field1", "the field is empty")
fmt.Println(errors.GetErrorContextValue(errWithContext, "field1"))

Get original error cause from wrapped error:

cusErr := customError{}
wrappedErr := errors.Wrap(cusErr, "wrapped customError")
wrappedErr = errors.Wrap(wrappedErr, "outer wrapped customError")
wrappedErr = errors.Wrap(wrappedErr, "outer outer wrapped customError")
causeErr := errors.Cause(wrappedErr)
originalErr, ok := causeErr.(customError)
# originalErr == cusErr

See more examples in errors_test.go.