Skip to content

Commit

Permalink
fix: update errors
Browse files Browse the repository at this point in the history
  • Loading branch information
kooksee committed Feb 2, 2024
1 parent b19df34 commit de714e2
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 10 deletions.
44 changes: 40 additions & 4 deletions errors/err_code.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,7 @@ func NewCodeErr(code *errorpb.ErrCode, details ...proto.Message) error {
}
}

return &ErrWrap{
caller: stack.Caller(1),
err: &ErrCode{pb: code, err: errors.New(code.Message)},
}
return &ErrCode{pb: code, err: errors.New(code.Message)}
}

func WrapCode(err error, code *errorpb.ErrCode) error {
Expand Down Expand Up @@ -71,6 +68,45 @@ func (t *ErrCode) Proto() *errorpb.ErrCode { return t.pb }
func (t *ErrCode) Kind() string { return "err_code" }
func (t *ErrCode) Format(f fmt.State, verb rune) { strFormat(f, verb, t) }

func (t *ErrCode) Is(err error) bool {
if err == nil {
return false
}

if t.err == err {
return true
}

err1, ok := err.(*ErrCode)
if ok && err1.pb.Code == t.pb.Code && err1.pb.Name == t.pb.Name {
return true
}

return false
}

func (t *ErrCode) As(err any) bool {
if err == nil {
return false
}

err1, ok := err.(*ErrCode)
if ok && err1.pb != nil && err1.pb.Code == t.pb.Code && err1.pb.Name == t.pb.Name {
return true
}

err2, ok := err.(**errorpb.ErrCode)
if ok && (*err2).Code == t.pb.Code && (*err2).Name == t.pb.Name {
return true
}

if err2, ok := err.(*errorpb.ErrCode); ok && (*err2).Code == t.pb.Code && (*err2).Name == t.pb.Name {
return true
}

return false
}

func (t *ErrCode) String() string {
var buf = bytes.NewBuffer(nil)
buf.WriteString(fmt.Sprintf("%s]: %q\n", errinter.ColorKind, t.Kind()))
Expand Down
17 changes: 17 additions & 0 deletions errors/err_code_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package errors_test

import (
"github.com/pubgo/funk/errors"
"github.com/pubgo/funk/proto/testcodepb"
"testing"
)

func TestErrCode(t *testing.T) {
var err1 = errors.Wrap(errors.NewCodeErr(testcodepb.ErrCodeDbConn), "hello")
rr := errors.Is(err1, errors.NewCodeErr(testcodepb.ErrCodeDbConn))
if !rr {
t.Fatal("not match")
}

t.Log(errors.As(err1, testcodepb.ErrCodeDbConn))
}
6 changes: 0 additions & 6 deletions errors/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ func UnwrapEach(err error, call func(e error) bool) {
}
}

var errorType = reflect.TypeOf((*error)(nil)).Elem()

func As(err error, target any) bool {
if target == nil {
panic("errors: target cannot be nil")
Expand All @@ -88,10 +86,6 @@ func As(err error, target any) bool {
}

targetType := typ.Elem()
if targetType.Kind() != reflect.Interface && !targetType.Implements(errorType) {
panic("errors: *target must be interface or implement error")
}

for err != nil {
if reflect.TypeOf(err).AssignableTo(targetType) {
val.Elem().Set(reflect.ValueOf(err))
Expand Down

0 comments on commit de714e2

Please sign in to comment.