12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package multierror
- import (
- "strings"
- )
- // Join is a drop-in replacement for errors.Join with better formatting.
- func Join(errs ...error) error {
- n := 0
- for _, err := range errs {
- if err != nil {
- n++
- }
- }
- if n == 0 {
- return nil
- }
- e := &joinError{
- errs: make([]error, 0, n),
- }
- for _, err := range errs {
- if err != nil {
- e.errs = append(e.errs, err)
- }
- }
- return e
- }
- type joinError struct {
- errs []error
- }
- func (e *joinError) Error() string {
- if len(e.errs) == 1 {
- return strings.TrimSpace(e.errs[0].Error())
- }
- stringErrs := make([]string, 0, len(e.errs))
- for _, subErr := range e.errs {
- stringErrs = append(stringErrs, strings.Replace(subErr.Error(), "\n", "\n\t", -1))
- }
- return "* " + strings.Join(stringErrs, "\n* ")
- }
- func (e *joinError) Unwrap() []error {
- return e.errs
- }
|