]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package multierror |
2 | ||
3 | // Flatten flattens the given error, merging any *Errors together into | |
4 | // a single *Error. | |
5 | func Flatten(err error) error { | |
6 | // If it isn't an *Error, just return the error as-is | |
7 | if _, ok := err.(*Error); !ok { | |
8 | return err | |
9 | } | |
10 | ||
11 | // Otherwise, make the result and flatten away! | |
12 | flatErr := new(Error) | |
13 | flatten(err, flatErr) | |
14 | return flatErr | |
15 | } | |
16 | ||
17 | func flatten(err error, flatErr *Error) { | |
18 | switch err := err.(type) { | |
19 | case *Error: | |
20 | for _, e := range err.Errors { | |
21 | flatten(e, flatErr) | |
22 | } | |
23 | default: | |
24 | flatErr.Errors = append(flatErr.Errors, err) | |
25 | } | |
26 | } |