Implement Is() for multierrors

We need to be able to identify the errors that a multierror wraps.
Especially in case of `context.Canceled`. This is the same
implementation of that method as we do in github.com/grafana/dskit/multierror

Signed-off-by: Oleg Zaytsev <mail@olegzaytsev.com>
This commit is contained in:
Oleg Zaytsev 2023-03-22 17:29:39 +01:00
parent 74916ab06e
commit 3d8b5e89ae
No known key found for this signature in database
GPG key ID: 7E9FE9FD48F512EF

View file

@ -16,6 +16,7 @@ package errors
import (
"bytes"
"errors"
"fmt"
"io"
)
@ -79,6 +80,19 @@ func (es nonNilMultiError) Error() string {
return buf.String()
}
// Is attempts to match the provided error against errors in the error list.
//
// This function allows errors.Is to traverse the values stored in the MultiError.
// It returns true if any of the errors in the list match the target.
func (es nonNilMultiError) Is(target error) bool {
for _, err := range es.errs {
if errors.Is(err, target) {
return true
}
}
return false
}
// CloseAll closes all given closers while recording error in MultiError.
func CloseAll(cs []io.Closer) error {
errs := NewMulti()