podman
1// Copyright 2020 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build !go1.13
6// +build !go1.13
7
8package errors9
10import "reflect"11
12// Is is a copy of Go 1.13's errors.Is for use with older Go versions.
13func Is(err, target error) bool {14if target == nil {15return err == target16}17
18isComparable := reflect.TypeOf(target).Comparable()19for {20if isComparable && err == target {21return true22}23if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {24return true25}26if err = unwrap(err); err == nil {27return false28}29}30}
31
32func unwrap(err error) error {33u, ok := err.(interface {34Unwrap() error35})36if !ok {37return nil38}39return u.Unwrap()40}
41