123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package common
- import (
- "errors"
- )
- // Code is the error code.
- type Code int
- // Application error codes.
- const (
- // 0 ~ 99 general error.
- Ok Code = 0
- Internal Code = 1
- NotAuthorized Code = 2
- Invalid Code = 3
- NotFound Code = 4
- Conflict Code = 5
- NotImplemented Code = 6
- )
- // Error represents an application-specific error. Application errors can be
- // unwrapped by the caller to extract out the code & message.
- //
- // Any non-application error (such as a disk error) should be reported as an
- // Internal error and the human user should only see "Internal error" as the
- // message. These low-level internal error details should only be logged and
- // reported to the operator of the application (not the end user).
- type Error struct {
- // Machine-readable error code.
- Code Code
- // Embedded error.
- Err error
- }
- // Error implements the error interface. Not used by the application otherwise.
- func (e *Error) Error() string {
- return e.Err.Error()
- }
- // ErrorCode unwraps an application error and returns its code.
- // Non-application errors always return EINTERNAL.
- func ErrorCode(err error) Code {
- var e *Error
- if err == nil {
- return Ok
- } else if errors.As(err, &e) {
- return e.Code
- }
- return Internal
- }
- // ErrorMessage unwraps an application error and returns its message.
- // Non-application errors always return "Internal error".
- func ErrorMessage(err error) string {
- var e *Error
- if err == nil {
- return ""
- } else if errors.As(err, &e) {
- return e.Err.Error()
- }
- return "Internal error."
- }
- // Errorf is a helper function to return an Error with a given code and error.
- func Errorf(code Code, err error) *Error {
- return &Error{
- Code: code,
- Err: err,
- }
- }
|