batcherror.go 821 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package errorx
  2. import "bytes"
  3. type (
  4. // A BatchError is an error that can hold multiple errors.
  5. BatchError struct {
  6. errs errorArray
  7. }
  8. errorArray []error
  9. )
  10. // Add adds err to be.
  11. func (be *BatchError) Add(err error) {
  12. if err != nil {
  13. be.errs = append(be.errs, err)
  14. }
  15. }
  16. // Err returns an error that represents all errors.
  17. func (be *BatchError) Err() error {
  18. switch len(be.errs) {
  19. case 0:
  20. return nil
  21. case 1:
  22. return be.errs[0]
  23. default:
  24. return be.errs
  25. }
  26. }
  27. // NotNil checks if any error inside.
  28. func (be *BatchError) NotNil() bool {
  29. return len(be.errs) > 0
  30. }
  31. // Error returns a string that represents inside errors.
  32. func (ea errorArray) Error() string {
  33. var buf bytes.Buffer
  34. for i := range ea {
  35. if i > 0 {
  36. buf.WriteByte('\n')
  37. }
  38. buf.WriteString(ea[i].Error())
  39. }
  40. return buf.String()
  41. }