Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
54 lines (45 sloc) 1.24 KB
package errors
// Unwrap returns the result of calling the Unwrap method on err, if err implements
// Unwrap. Otherwise, Unwrap returns nil.
//
// It supports both Go 1.13 Unwrap and github.com/pkg/errors.Causer interfaces
// (the former takes precedence).
func Unwrap(err error) error {
switch e := err.(type) {
case interface{ Unwrap() error }:
return e.Unwrap()
case interface{ Cause() error }:
return e.Cause()
}
return nil
}
// UnwrapEach loops through an error chain and calls a function for each of them.
//
// The provided function can return false to break the loop before it reaches the end of the chain.
//
// It supports both Go 1.13 errors.Wrapper and github.com/pkg/errors.Causer interfaces
// (the former takes precedence).
func UnwrapEach(err error, fn func(err error) bool) {
for err != nil {
continueLoop := fn(err)
if !continueLoop {
break
}
err = Unwrap(err)
}
}
// Cause returns the last error (root cause) in an err's chain.
// If err has no chain, it is returned directly.
//
// It supports both Go 1.13 errors.Wrapper and github.com/pkg/errors.Causer interfaces
// (the former takes precedence).
func Cause(err error) error {
for {
cause := Unwrap(err)
if cause == nil {
break
}
err = cause
}
return err
}
You can’t perform that action at this time.