github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/errors/append.go (about) 1 package errors 2 3 import ( 4 "strings" 5 ) 6 7 type multiError struct { 8 cause error 9 additional []error 10 } 11 12 func (e *multiError) Error() string { 13 s := e.cause.Error() + "\n Additional errors:" 14 for _, err := range e.additional { 15 s += "\n * " + strings.Replace(err.Error(), "\n", "\n ", -1) 16 } 17 return s 18 } 19 20 func (e *multiError) Cause() error { 21 return e.cause 22 } 23 24 func (e *multiError) Additional() []error { 25 return e.additional 26 } 27 28 // Creates a new error containing the additional errors 29 // while preserving the original /pkg/error chain 30 func Append(err error, add error) (r error) { 31 if err == nil { 32 return add 33 } else if add == nil { 34 return err 35 } 36 var errs []error 37 if merr, ok := err.(*multiError); ok { 38 err = merr.Cause() 39 errs = append(merr.additional, add) 40 } else { 41 errs = []error{add} 42 } 43 return &multiError{err, errs} 44 }