forked from ebhomengo/niki
feat(pkg): add richerror
This commit is contained in:
parent
370ca1da1f
commit
cec13c8bbe
|
@ -0,0 +1,83 @@
|
|||
package richerror
|
||||
|
||||
type Kind int
|
||||
|
||||
const (
|
||||
KindInvalid Kind = iota + 1
|
||||
KindForbidden
|
||||
KindNotFound
|
||||
KindUnexpected
|
||||
)
|
||||
|
||||
type Op string
|
||||
|
||||
type RichError struct {
|
||||
operation Op
|
||||
wrappedError error
|
||||
message string
|
||||
kind Kind
|
||||
meta map[string]interface{}
|
||||
}
|
||||
|
||||
func New(op Op) RichError {
|
||||
return RichError{operation: op}
|
||||
}
|
||||
|
||||
func (r RichError) WithOp(op Op) RichError {
|
||||
r.operation = op
|
||||
return r
|
||||
}
|
||||
|
||||
func (r RichError) WithErr(err error) RichError {
|
||||
r.wrappedError = err
|
||||
return r
|
||||
}
|
||||
|
||||
func (r RichError) WithMessage(message string) RichError {
|
||||
r.message = message
|
||||
return r
|
||||
}
|
||||
|
||||
func (r RichError) WithKind(kind Kind) RichError {
|
||||
r.kind = kind
|
||||
return r
|
||||
}
|
||||
|
||||
func (r RichError) WithMeta(meta map[string]interface{}) RichError {
|
||||
r.meta = meta
|
||||
return r
|
||||
}
|
||||
|
||||
func (r RichError) Error() string {
|
||||
if r.message == "" {
|
||||
return r.wrappedError.Error()
|
||||
}
|
||||
|
||||
return r.message
|
||||
}
|
||||
|
||||
func (r RichError) Kind() Kind {
|
||||
if r.kind != 0 {
|
||||
return r.kind
|
||||
}
|
||||
|
||||
re, ok := r.wrappedError.(RichError)
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
|
||||
return re.Kind()
|
||||
}
|
||||
|
||||
func (r RichError) Message() string {
|
||||
if r.message != "" {
|
||||
return r.message
|
||||
}
|
||||
|
||||
re, ok := r.wrappedError.(RichError)
|
||||
if !ok {
|
||||
return r.wrappedError.Error()
|
||||
}
|
||||
|
||||
return re.Message()
|
||||
}
|
Loading…
Reference in New Issue