package multierror // Flatten flattens the given error, merging any *Errors together into // a single *Error. func Flatten(err error) error { // If it isn't an *Error, just return the error as-is if _, ok := err.(*Error); !ok { return err } // Otherwise, make the result and flatten away! flatErr := new(Error) flatten(err, flatErr) return flatErr } func flatten(err error, flatErr *Error) { switch err := err.(type) { case *Error: for _, e := range err.Errors { flatten(e, flatErr) } default: flatErr.Errors = append(flatErr.Errors, err) } }