gitlab.com/SiaPrime/SiaPrime@v1.4.1/build/errors.go (about)

     1  package build
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  )
     7  
     8  // ComposeErrors will take multiple errors and compose them into a single
     9  // errors with a longer message. Any nil errors used as inputs will be stripped
    10  // out, and if there are zero non-nil inputs then 'nil' will be returned.
    11  //
    12  // The original types of the errors is not preserved at all.
    13  func ComposeErrors(errs ...error) error {
    14  	// Strip out any nil errors.
    15  	var errStrings []string
    16  	for _, err := range errs {
    17  		if err != nil {
    18  			errStrings = append(errStrings, err.Error())
    19  		}
    20  	}
    21  
    22  	// Return nil if there are no non-nil errors in the input.
    23  	if len(errStrings) <= 0 {
    24  		return nil
    25  	}
    26  
    27  	// Combine all of the non-nil errors into one larger return value.
    28  	return errors.New(strings.Join(errStrings, "; "))
    29  }
    30  
    31  // ExtendErr will return a new error which extends the input error with a
    32  // string. If the input error is nil, then 'nil' will be returned, discarding
    33  // the input string.
    34  func ExtendErr(s string, err error) error {
    35  	if err == nil {
    36  		return nil
    37  	}
    38  	return errors.New(s + ": " + err.Error())
    39  }
    40  
    41  // JoinErrors concatenates the elements of errs to create a single error. The
    42  // separator string sep is placed between elements in the resulting error. Nil
    43  // errors are skipped. If errs is empty or only contains nil elements,
    44  // JoinErrors returns nil.
    45  func JoinErrors(errs []error, sep string) error {
    46  	var strs []string
    47  	for _, err := range errs {
    48  		if err != nil {
    49  			strs = append(strs, err.Error())
    50  		}
    51  	}
    52  	if len(strs) > 0 {
    53  		return errors.New(strings.Join(strs, sep))
    54  	}
    55  	return nil
    56  }