| package multierror |
| |
| import ( |
| "fmt" |
| ) |
| |
| // Error is an error type to track multiple errors. This is used to |
| // accumulate errors in cases and return them as a single "error". |
| type Error struct { |
| Errors []error |
| ErrorFormat ErrorFormatFunc |
| } |
| |
| func (e *Error) Error() string { |
| fn := e.ErrorFormat |
| if fn == nil { |
| fn = ListFormatFunc |
| } |
| |
| return fn(e.Errors) |
| } |
| |
| // ErrorOrNil returns an error interface if this Error represents |
| // a list of errors, or returns nil if the list of errors is empty. This |
| // function is useful at the end of accumulation to make sure that the value |
| // returned represents the existence of errors. |
| func (e *Error) ErrorOrNil() error { |
| if e == nil { |
| return nil |
| } |
| if len(e.Errors) == 0 { |
| return nil |
| } |
| |
| return e |
| } |
| |
| func (e *Error) GoString() string { |
| return fmt.Sprintf("*%#v", *e) |
| } |
| |
| // WrappedErrors returns the list of errors that this Error is wrapping. |
| // It is an implementatin of the errwrap.Wrapper interface so that |
| // multierror.Error can be used with that library. |
| // |
| // This method is not safe to be called concurrently and is no different |
| // than accessing the Errors field directly. It is implementd only to |
| // satisfy the errwrap.Wrapper interface. |
| func (e *Error) WrappedErrors() []error { |
| return e.Errors |
| } |