60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
package flaterr
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type MultErr struct {
|
|
Errors []error
|
|
}
|
|
|
|
// Error returns the errors string to implement the error interface
|
|
func (e *MultErr) Error() string {
|
|
if len(e.Errors) == 0 {
|
|
return ""
|
|
}
|
|
var sb strings.Builder
|
|
for _, err := range e.Errors {
|
|
sb.WriteString(err.Error())
|
|
sb.WriteRune('\n')
|
|
}
|
|
return sb.String()
|
|
}
|
|
|
|
// Add add errors to MultErr
|
|
func (e *MultErr) Add(errs ...error) *MultErr {
|
|
for _, err := range errs {
|
|
if err != nil {
|
|
e.Errors = append(e.Errors, err)
|
|
}
|
|
}
|
|
return e
|
|
}
|
|
|
|
// Addf add formatted error by use fmt.Errorf()
|
|
func (e *MultErr) Addf(format string, a ...any) *MultErr {
|
|
e.Errors = append(e.Errors, fmt.Errorf(format, a...))
|
|
return e
|
|
}
|
|
|
|
// Addt add template error by use fmt.Errorf()
|
|
func (e *MultErr) Addt(msg Msg, content string, err error) *MultErr {
|
|
e.Errors = append(e.Errors, fmt.Errorf(msg.Fmt(), content, err))
|
|
return e
|
|
}
|
|
|
|
// Flat return multiple errors by use errors.Join()
|
|
func (e *MultErr) Flat() error {
|
|
if len(e.Errors) == 1 {
|
|
return e.Errors[0]
|
|
}
|
|
|
|
if len(e.Errors) > 1 {
|
|
return errors.Join(e.Errors...)
|
|
}
|
|
|
|
return nil
|
|
}
|