File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22
33package errors
44
5+ import "errors"
6+
57func 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+ }
Original file line number Diff line number Diff 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+ }
You can’t perform that action at this time.
0 commit comments