diff --git a/errors/errors.go b/errors/errors.go index 4f4b8e4..6530044 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -133,7 +133,7 @@ func (e *ers) HasCode(code CodeError) bool { } for _, p := range e.p { - if p.IsCode(code) { + if p.HasCode(code) { return true } } @@ -285,6 +285,31 @@ func (e *ers) GetErrorSlice() []error { return r } +func (e *ers) Unwrap() []error { + var r = []error{ + &ers{ + c: e.c, + e: e.e, + p: nil, + t: e.t, + }, + } + + if len(e.p) < 1 { + return r + } + + for _, v := range e.p { + if v == nil { + continue + } + + r = append(r, v.Unwrap()...) + } + + return r +} + func (e *ers) GetTrace() string { if e.t.File != "" { return fmt.Sprintf("%s#%d", filterPath(e.t.File), e.t.Line) diff --git a/errors/interface.go b/errors/interface.go index 6800030..0042c52 100644 --- a/errors/interface.go +++ b/errors/interface.go @@ -95,6 +95,8 @@ type Error interface { GetError() error //GetErrorSlice is used to return a slice of new error interface, based of the current error and all parent GetErrorSlice() []error + //Unwrap will set compliance with errors As/Is functions + Unwrap() []error //GetTrace will return a comped string for the trace of the current Error GetTrace() string @@ -137,7 +139,6 @@ func Is(e error) bool { func Get(e error) Error { var err Error - if errors.As(e, &err) { return err }