From aeca2b332f3f524fd7a6418bd31f4f53bb2e353d Mon Sep 17 00:00:00 2001 From: Quentin Renard Date: Sun, 28 May 2023 09:59:13 +0200 Subject: [PATCH] Added Errors.Is --- errors.go | 11 +++++++++++ errors_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/errors.go b/errors.go index 46e8496..518b68d 100644 --- a/errors.go +++ b/errors.go @@ -59,6 +59,17 @@ func (errs *Errors) Error() string { return strings.Join(ss, " && ") } +func (errs *Errors) Is(target error) bool { + errs.m.Lock() + defer errs.m.Unlock() + for _, v := range errs.p { + if errors.Is(v, target) { + return true + } + } + return false +} + // ErrorCause returns the cause of an error func ErrorCause(err error) error { for { diff --git a/errors_test.go b/errors_test.go index 61114f2..df5e625 100644 --- a/errors_test.go +++ b/errors_test.go @@ -26,6 +26,31 @@ func TestErrors(t *testing.T) { } return false }) + err1 := errors.New("1") + err2 := errors.New("2") + err3 := errors.New("3") + errs = NewErrors(err1, err3) + for _, v := range []struct { + err error + expected bool + }{ + { + err: err1, + expected: true, + }, + { + err: err2, + expected: false, + }, + { + err: err3, + expected: true, + }, + } { + if g := errors.Is(errs, v.err); g != v.expected { + t.Errorf("expected %v, got %v", v.expected, g) + } + } } func TestErrorCause(t *testing.T) {