diff options
| author | Shulhan <m.shulhan@gmail.com> | 2019-12-23 16:29:51 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2019-12-23 16:47:49 +0700 |
| commit | 3762921fbd28e9e11117a54c5a2aa1fe24d0f2b5 (patch) | |
| tree | 5b57b046a9e5378e4e61d3353bf1d908e6c02536 /lib/errors/errors.go | |
| parent | e1a4c9127b79e6501611e70d8de51be611809f21 (diff) | |
| download | pakakeh.go-3762921fbd28e9e11117a54c5a2aa1fe24d0f2b5.tar.xz | |
errors: add field Name and err
The field Name is optional, intended to be consumed by program, for
example, to provide a key as translation of Message into user's locale
defined language.
The err field is the underlying error.
Diffstat (limited to 'lib/errors/errors.go')
| -rw-r--r-- | lib/errors/errors.go | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/lib/errors/errors.go b/lib/errors/errors.go index ddd116e8..35b74d1c 100644 --- a/lib/errors/errors.go +++ b/lib/errors/errors.go @@ -10,20 +10,32 @@ import ( ) // -// E define custom error type with code. +// E define custom error that wrap underlying error with custom code, message, +// and name. +// +// The Code field is required, used to communicate the HTTP response code. +// The Message field is optional, it's used to communicate the actual error +// message from server, to be readable by human. +// The Name field is optional, intended to be consumed by program, for +// example, to provide a key as translation of Message into user's locale +// defined language. // type E struct { - Code int - Message string + Code int `json:"code,omitempty"` + Message string `json:"message,omitempty"` + Name string `json:"name,omitempty"` + err error } // -// Internal define an error for internal server. +// Internal define an error caused by server. // -func Internal() *E { +func Internal(err error) *E { return &E{ Code: http.StatusInternalServerError, - Message: "Internal server error", + Message: "internal server error", + Name: "ERR_INTERNAL", + err: err, } } @@ -33,7 +45,8 @@ func Internal() *E { func InvalidInput(field string) *E { return &E{ Code: http.StatusBadRequest, - Message: "Invalid input: " + field, + Message: "invalid input: " + field, + Name: "ERR_INVALID_INPUT", } } @@ -43,3 +56,10 @@ func InvalidInput(field string) *E { func (e *E) Error() string { return e.Message } + +// +// Unwrap return the internal error. +// +func (e *E) Unwrap() error { + return e.err +} |
