mirror of
https://github.com/absmach/magistrala.git
synced 2026-06-23 04:10:28 +00:00
NOISSUE : Revert removal of errors Unwrap function (#3299)
Signed-off-by: Felix Gateru <felix.gateru@gmail.com>
This commit is contained in:
@@ -98,6 +98,21 @@ func Wrap(wrapper, err error) error {
|
||||
}
|
||||
}
|
||||
|
||||
// Unwrap returns the wrapper and the error by separating the Wrapper from the error.
|
||||
func Unwrap(err error) (error, error) {
|
||||
if err == nil {
|
||||
return nil, nil
|
||||
}
|
||||
if ce, ok := err.(Error); ok {
|
||||
if ce.Err() == nil {
|
||||
return nil, New(ce.Msg())
|
||||
}
|
||||
return New(ce.Msg()), ce.Err()
|
||||
}
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func cast(err error) Error {
|
||||
if err == nil {
|
||||
return nil
|
||||
|
||||
@@ -276,6 +276,56 @@ func TestWrap(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnwrap(t *testing.T) {
|
||||
cases := []struct {
|
||||
desc string
|
||||
err error
|
||||
wrapper error
|
||||
wrapped error
|
||||
}{
|
||||
{
|
||||
desc: "err 1 wraped err 2",
|
||||
err: errors.Wrap(err1, err2),
|
||||
wrapper: err2,
|
||||
wrapped: fmt.Errorf("%w: %w", err2, err1),
|
||||
},
|
||||
{
|
||||
desc: "nil wraps nil",
|
||||
err: errors.Wrap(nil, nil),
|
||||
wrapper: nil,
|
||||
wrapped: nil,
|
||||
},
|
||||
{
|
||||
desc: "nil wraps err0",
|
||||
err: errors.Wrap(nil, err0),
|
||||
wrapper: nil,
|
||||
wrapped: nil,
|
||||
},
|
||||
{
|
||||
desc: "nil wraps native error",
|
||||
err: errors.Wrap(nil, nat),
|
||||
wrapper: nil,
|
||||
wrapped: nil,
|
||||
},
|
||||
{
|
||||
desc: "native error wraps nil",
|
||||
err: errors.Wrap(nat, nil),
|
||||
wrapper: nil,
|
||||
wrapped: nat,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
t.Run(c.desc, func(t *testing.T) {
|
||||
wrapper, wrapped := errors.Unwrap(c.err)
|
||||
assert.Equal(t, c.wrapper, wrapper)
|
||||
if c.wrapped != nil {
|
||||
assert.Equal(t, c.wrapped.Error(), wrapped.Error())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func wrap(level int) error {
|
||||
if level == 0 {
|
||||
return errors.New(strconv.Itoa(level))
|
||||
|
||||
Reference in New Issue
Block a user