multi_error.go 764 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package errors
  2. import (
  3. "errors"
  4. "strings"
  5. )
  6. type multiError []error
  7. func (e multiError) Error() string {
  8. var r strings.Builder
  9. r.WriteString("multierr: ")
  10. for _, err := range e {
  11. r.WriteString(err.Error())
  12. r.WriteString(" | ")
  13. }
  14. return r.String()
  15. }
  16. func Combine(maybeError ...error) error {
  17. var errs multiError
  18. for _, err := range maybeError {
  19. if err != nil {
  20. errs = append(errs, err)
  21. }
  22. }
  23. if len(errs) == 0 {
  24. return nil
  25. }
  26. return errs
  27. }
  28. func AllEqual(expected error, actual error) bool {
  29. switch errs := actual.(type) {
  30. case multiError:
  31. if len(errs) == 0 {
  32. return false
  33. }
  34. for _, err := range errs {
  35. if !errors.Is(err, expected) {
  36. return false
  37. }
  38. }
  39. return true
  40. default:
  41. return errors.Is(errs, expected)
  42. }
  43. }