You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

27 lines
568 B

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