Skip to content

Commit 83cd99b

Browse files
committed
add AsType helper fn
1 parent a9b4104 commit 83cd99b

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

cause_go118.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
package errors
44

5+
import "errors"
6+
57
func IsOfType[T error](err error) bool {
68
for {
79
if _, ok := err.(T); ok || err == nil {
@@ -11,3 +13,9 @@ func IsOfType[T error](err error) bool {
1113
err = Unwrap(err)
1214
}
1315
}
16+
17+
func AsType[T error](err error) (T, bool) {
18+
var e T
19+
20+
return e, errors.As(err, &e)
21+
}

cause_go118_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,35 @@ func TestIsOfType(t *testing.T) {
3939
assert.Equal(t, tt.isMockError, IsOfType[mockError](tt.input))
4040
}
4141
}
42+
43+
func TestAsOfType(t *testing.T) {
44+
for _, tt := range []struct {
45+
name string
46+
input error
47+
expected error
48+
}{
49+
{
50+
name: "nil error",
51+
},
52+
{
53+
name: "mockError",
54+
input: mockError{},
55+
expected: mockError{},
56+
},
57+
{
58+
name: "wrapped mockError",
59+
input: Wrap(mockError{}, "wrapping"),
60+
expected: mockError{},
61+
},
62+
} {
63+
t.Run(tt.name, func(t *testing.T) {
64+
m, ok := AsType[mockError](tt.input)
65+
66+
assert.Equal(t, tt.expected != nil, ok)
67+
68+
if ok {
69+
assert.Equal(t, tt.expected, m)
70+
}
71+
})
72+
}
73+
}

0 commit comments

Comments
 (0)