123456789101112131415161718192021222324252627282930313233343536373839 |
- // Copyright 2020 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // +build !go1.13
- package errors
- import "reflect"
- // Is is a copy of Go 1.13's errors.Is for use with older Go versions.
- func Is(err, target error) bool {
- if target == nil {
- return err == target
- }
- isComparable := reflect.TypeOf(target).Comparable()
- for {
- if isComparable && err == target {
- return true
- }
- if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
- return true
- }
- if err = unwrap(err); err == nil {
- return false
- }
- }
- }
- func unwrap(err error) error {
- u, ok := err.(interface {
- Unwrap() error
- })
- if !ok {
- return nil
- }
- return u.Unwrap()
- }
|