diff --git a/errors.go b/errors.go index 8617bee..161aea2 100644 --- a/errors.go +++ b/errors.go @@ -159,6 +159,9 @@ type withStack struct { func (w *withStack) Cause() error { return w.error } +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withStack) Unwrap() error { return w.error } + func (w *withStack) Format(s fmt.State, verb rune) { switch verb { case 'v': @@ -241,6 +244,9 @@ type withMessage struct { func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } func (w *withMessage) Cause() error { return w.cause } +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withMessage) Unwrap() error { return w.cause } + func (w *withMessage) Format(s fmt.State, verb rune) { switch verb { case 'v': diff --git a/go113_test.go b/go113_test.go new file mode 100644 index 0000000..39263b0 --- /dev/null +++ b/go113_test.go @@ -0,0 +1,16 @@ +// +build go1.13 + +package errors + +import ( + stdlib_errors "errors" + "testing" +) + +func TestErrorChainCompat(t *testing.T) { + err := stdlib_errors.New("error that gets wrapped") + wrapped := Wrap(err, "wrapped up") + if !stdlib_errors.Is(wrapped, err) { + t.Errorf("Wrap does not support Go 1.13 error chains") + } +}