38 lines
692 B
Go
38 lines
692 B
Go
|
package errchan
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type ErrChan struct {
|
||
|
C chan error
|
||
|
}
|
||
|
|
||
|
// New returns an error channel of max length 'n'
|
||
|
// errors can be sent to the ErrChan.C channel, and will be returned when
|
||
|
// ErrChan.Error() is called.
|
||
|
func New(n int) *ErrChan {
|
||
|
return &ErrChan{
|
||
|
C: make(chan error, n),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Error closes the ErrChan.C channel and returns an error if there are any
|
||
|
// non-nil errors, otherwise returns nil.
|
||
|
func (e *ErrChan) Error() error {
|
||
|
close(e.C)
|
||
|
|
||
|
var out string
|
||
|
for err := range e.C {
|
||
|
if err != nil {
|
||
|
out += "[" + err.Error() + "], "
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if out != "" {
|
||
|
return fmt.Errorf("Errors encountered: " + strings.TrimRight(out, ", "))
|
||
|
}
|
||
|
return nil
|
||
|
}
|