dotcloud/docker

View on GitHub
internal/multierror/multierror.go

Summary

Maintainability
A
0 mins
Test Coverage
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
}