finalizing logging and multierror
This commit is contained in:
85
multierr/funcs.go
Normal file
85
multierr/funcs.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package multierr
|
||||
|
||||
import (
|
||||
`fmt`
|
||||
)
|
||||
|
||||
/*
|
||||
NewErrors returns a new MultiError (as an error) based on/initialized with a slice of error.Error (errs).
|
||||
Any nil errors are trimmed.
|
||||
If there are no actual errors after trimming, err will be nil.
|
||||
*/
|
||||
func NewErrors(errs ...error) (err error) {
|
||||
|
||||
if errs == nil || len(errs) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
var realErrs []error = make([]error, 0)
|
||||
|
||||
for _, e := range errs {
|
||||
if e == nil {
|
||||
continue
|
||||
}
|
||||
realErrs = append(realErrs, e)
|
||||
}
|
||||
|
||||
if len(realErrs) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
err = &MultiError{
|
||||
Errors: realErrs,
|
||||
ErrorSep: "\n",
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// NewMultiError will provide a MultiError (true type), optionally initialized with errors.
|
||||
func NewMultiError(errs ...error) (m *MultiError) {
|
||||
|
||||
if errs == nil {
|
||||
errs = make([]error, 0)
|
||||
}
|
||||
|
||||
m = &MultiError{
|
||||
Errors: errs,
|
||||
ErrorSep: "\n",
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Error returns a string representation of a MultiError (to conform with the error interface).
|
||||
func (e *MultiError) Error() (errStr string) {
|
||||
|
||||
var numErrs int
|
||||
|
||||
if e == nil || len(e.Errors) == 0 {
|
||||
return
|
||||
} else {
|
||||
numErrs = len(e.Errors)
|
||||
}
|
||||
|
||||
for idx, err := range e.Errors {
|
||||
if (idx + 1) < numErrs {
|
||||
errStr += fmt.Sprintf("%v%v", err.Error(), e.ErrorSep)
|
||||
} else {
|
||||
errStr += err.Error()
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// AddError is a shorthand way of adding an error to a MultiError.
|
||||
func (e *MultiError) AddError(err error) {
|
||||
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
e.Errors = append(e.Errors, err)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user