Skip to content

Commit e623411

Browse files
committed
try variadic helper
1 parent ca17073 commit e623411

File tree

1 file changed

+20
-25
lines changed

1 file changed

+20
-25
lines changed

errutil.go

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -114,37 +114,32 @@ func Find[T error](err error) (T, bool) {
114114
return zero, false
115115
}
116116
var ptr *T
117-
return find(err, &ptr)
117+
return find(&ptr, err)
118118
}
119119

120-
func find[T error](err error, ptr2 **T) (T, bool) {
121-
x, ok := err.(T)
122-
if ok {
123-
return x, true
124-
}
125-
if x, ok := err.(interface{ As(any) bool }); ok {
126-
if *ptr2 == nil {
127-
*ptr2 = new(T)
128-
}
129-
if x.As(*ptr2) {
130-
return **ptr2, true
120+
func find[T error](ptr2 **T, errs ...error) (T, bool) {
121+
for _, err := range errs {
122+
x, ok := err.(T)
123+
if ok {
124+
return x, true
131125
}
132-
}
133-
switch x := err.(type) {
134-
case interface{ Unwrap() error }:
135-
err = x.Unwrap()
136-
if err == nil {
137-
break
126+
if x, ok := err.(interface{ As(any) bool }); ok {
127+
if *ptr2 == nil {
128+
*ptr2 = new(T)
129+
}
130+
if x.As(*ptr2) {
131+
return **ptr2, true
132+
}
138133
}
139-
return find(err, ptr2)
140-
case interface{ Unwrap() []error }:
141-
for _, err := range x.Unwrap() {
134+
switch x := err.(type) {
135+
case interface{ Unwrap() error }:
136+
err = x.Unwrap()
142137
if err == nil {
143-
continue
144-
}
145-
if x, ok := find(err, ptr2); ok {
146-
return x, true
138+
break
147139
}
140+
return find(ptr2, err)
141+
case interface{ Unwrap() []error }:
142+
return find(ptr2, x.Unwrap()...)
148143
}
149144
}
150145
var zero T

0 commit comments

Comments
 (0)