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