github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/errors/append.go (about)

     1  package errors
     2  
     3  import (
     4  	"strings"
     5  )
     6  
     7  type multiError struct {
     8  	cause      error
     9  	additional []error
    10  }
    11  
    12  func (e *multiError) Error() string {
    13  	s := e.cause.Error() + "\n  Additional errors:"
    14  	for _, err := range e.additional {
    15  		s += "\n  * " + strings.Replace(err.Error(), "\n", "\n    ", -1)
    16  	}
    17  	return s
    18  }
    19  
    20  func (e *multiError) Cause() error {
    21  	return e.cause
    22  }
    23  
    24  func (e *multiError) Additional() []error {
    25  	return e.additional
    26  }
    27  
    28  // Creates a new error containing the additional errors
    29  // while preserving the original /pkg/error chain
    30  func Append(err error, add error) (r error) {
    31  	if err == nil {
    32  		return add
    33  	} else if add == nil {
    34  		return err
    35  	}
    36  	var errs []error
    37  	if merr, ok := err.(*multiError); ok {
    38  		err = merr.Cause()
    39  		errs = append(merr.additional, add)
    40  	} else {
    41  		errs = []error{add}
    42  	}
    43  	return &multiError{err, errs}
    44  }