mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 20:52:33 +02:00
69 lines
1.2 KiB
Go
69 lines
1.2 KiB
Go
package err
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
func newError(message string) error {
|
|
return errStr(message)
|
|
}
|
|
|
|
func New(message string) Error {
|
|
if message == "" {
|
|
return nil
|
|
}
|
|
return &baseError{newError(message)}
|
|
}
|
|
|
|
func Errorf(format string, args ...any) Error {
|
|
return &baseError{fmt.Errorf(format, args...)}
|
|
}
|
|
|
|
func From(err error) (e Error) {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
if errors.As(err, &e) {
|
|
return e
|
|
}
|
|
return &baseError{err}
|
|
}
|
|
|
|
func Must[T any](v T, err error) T {
|
|
if err != nil {
|
|
LogPanic("must failed", err)
|
|
}
|
|
return v
|
|
}
|
|
|
|
func Join(errors ...error) Error {
|
|
n := 0
|
|
for _, err := range errors {
|
|
if err != nil {
|
|
n++
|
|
}
|
|
}
|
|
if n == 0 {
|
|
return nil
|
|
}
|
|
errs := make([]error, 0, n)
|
|
for _, err := range errors {
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
}
|
|
return &nestedError{Extras: errs}
|
|
}
|
|
|
|
func Collect[T any, Err error, Arg any, Func func(Arg) (T, Err)](eb *Builder, fn Func, arg Arg) T {
|
|
result, err := fn(arg)
|
|
eb.Add(err)
|
|
return result
|
|
}
|
|
|
|
func Collect2[T any, Err error, Arg1 any, Arg2 any, Func func(Arg1, Arg2) (T, Err)](eb *Builder, fn Func, arg1 Arg1, arg2 Arg2) T {
|
|
result, err := fn(arg1, arg2)
|
|
eb.Add(err)
|
|
return result
|
|
}
|