mirror of
https://github.com/duke-git/lancet.git
synced 2025-09-26 19:41:20 +08:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package internal
|
|
|
|
// Note: this file is copyed from the go standart repo (https://github.com/golang/go/blob/master/src/errors/join.go).
|
|
// just in order to adapt under go1.9
|
|
// do not use it outside lancet lib.
|
|
|
|
// Join returns an error that wraps the given errors.
|
|
// Any nil error values are discarded.
|
|
// Join returns nil if errs contains no non-nil values.
|
|
// The error formats as the concatenation of the strings obtained
|
|
// by calling the Error method of each element of errs, with a newline
|
|
// between each string.
|
|
func JoinError(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 {
|
|
var b []byte
|
|
for i, err := range e.errs {
|
|
if i > 0 {
|
|
b = append(b, '\n')
|
|
}
|
|
b = append(b, err.Error()...)
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func (e *joinError) Unwrap() []error {
|
|
return e.errs
|
|
}
|