aboutsummaryrefslogtreecommitdiff
path: root/lib/errors/errors.go
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2019-12-23 16:29:51 +0700
committerShulhan <m.shulhan@gmail.com>2019-12-23 16:47:49 +0700
commit3762921fbd28e9e11117a54c5a2aa1fe24d0f2b5 (patch)
tree5b57b046a9e5378e4e61d3353bf1d908e6c02536 /lib/errors/errors.go
parente1a4c9127b79e6501611e70d8de51be611809f21 (diff)
downloadpakakeh.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.go34
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
+}