2020-11-19 07:52:04 +00:00
|
|
|
package multierror
|
|
|
|
|
|
|
|
// Append is a helper function that will append more errors
|
|
|
|
// onto an Error in order to create a larger multi-error.
|
|
|
|
//
|
|
|
|
// If err is not a multierror.Error, then it will be turned into
|
|
|
|
// one. If any of the errs are multierr.Error, they will be flattened
|
|
|
|
// one level into err.
|
2021-10-18 20:26:08 +00:00
|
|
|
// Any nil errors within errs will be ignored. If err is nil, a new
|
|
|
|
// *Error will be returned.
|
2020-11-19 07:52:04 +00:00
|
|
|
func Append(err error, errs ...error) *Error {
|
|
|
|
switch err := err.(type) {
|
|
|
|
case *Error:
|
|
|
|
// Typed nils can reach here, so initialize if we are nil
|
|
|
|
if err == nil {
|
|
|
|
err = new(Error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Go through each error and flatten
|
|
|
|
for _, e := range errs {
|
|
|
|
switch e := e.(type) {
|
|
|
|
case *Error:
|
|
|
|
if e != nil {
|
|
|
|
err.Errors = append(err.Errors, e.Errors...)
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
if e != nil {
|
|
|
|
err.Errors = append(err.Errors, e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
default:
|
|
|
|
newErrs := make([]error, 0, len(errs)+1)
|
|
|
|
if err != nil {
|
|
|
|
newErrs = append(newErrs, err)
|
|
|
|
}
|
|
|
|
newErrs = append(newErrs, errs...)
|
|
|
|
|
|
|
|
return Append(&Error{}, newErrs...)
|
|
|
|
}
|
|
|
|
}
|