// OneOf to tell if the error exists in the array
func OneOf(err error, targets ...error) bool {
if len(targets) == 0 {
return false
}
for _, target := range targets {
if Is(err, target) {
return true
}
}
return false
}
// IsOnly tells if the error is one specific type only
func IsOnly(err, target error) bool {
if target == nil {
return err == target
}
isComparable := reflect.TypeOf(target).Comparable()
if isComparable && err != target {
return false
}
if x, ok := err.(interface{ Is(error) bool }); ok && !x.Is(target) {
return false
}
if err = errors.Unwrap(err); err != nil {
return false
}
return true
}