...

Source file src/google.golang.org/protobuf/internal/errors/is_go112.go

Documentation: google.golang.org/protobuf/internal/errors

     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  
     8  package errors
     9  
    10  import "reflect"
    11  
    12  // Is is a copy of Go 1.13's errors.Is for use with older Go versions.
    13  func Is(err, target error) bool {
    14  	if target == nil {
    15  		return err == target
    16  	}
    17  
    18  	isComparable := reflect.TypeOf(target).Comparable()
    19  	for {
    20  		if isComparable && err == target {
    21  			return true
    22  		}
    23  		if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
    24  			return true
    25  		}
    26  		if err = unwrap(err); err == nil {
    27  			return false
    28  		}
    29  	}
    30  }
    31  
    32  func unwrap(err error) error {
    33  	u, ok := err.(interface {
    34  		Unwrap() error
    35  	})
    36  	if !ok {
    37  		return nil
    38  	}
    39  	return u.Unwrap()
    40  }
    41  

View as plain text