errors.go 811 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package interceptor
  2. import (
  3. "errors"
  4. "strings"
  5. )
  6. func flattenErrs(errs []error) error {
  7. errs2 := []error{}
  8. for _, e := range errs {
  9. if e != nil {
  10. errs2 = append(errs2, e)
  11. }
  12. }
  13. if len(errs2) == 0 {
  14. return nil
  15. }
  16. return multiError(errs2)
  17. }
  18. type multiError []error //nolint
  19. func (me multiError) Error() string {
  20. var errstrings []string
  21. for _, err := range me {
  22. if err != nil {
  23. errstrings = append(errstrings, err.Error())
  24. }
  25. }
  26. if len(errstrings) == 0 {
  27. return "multiError must contain multiple error but is empty"
  28. }
  29. return strings.Join(errstrings, "\n")
  30. }
  31. func (me multiError) Is(err error) bool {
  32. for _, e := range me {
  33. if errors.Is(e, err) {
  34. return true
  35. }
  36. if me2, ok := e.(multiError); ok { //nolint
  37. if me2.Is(err) {
  38. return true
  39. }
  40. }
  41. }
  42. return false
  43. }