NOISSUE : Revert removal of errors Unwrap function (#3299)

Signed-off-by: Felix Gateru <felix.gateru@gmail.com>
This commit is contained in:
Felix Gateru
2025-12-23 17:37:51 +03:00
committed by GitHub
parent e23555ee2a
commit 59f8d4e4d7
2 changed files with 65 additions and 0 deletions
+15
View File
@@ -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
+50
View File
@@ -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))