refactored ResultOf and ResultOfValue

This commit is contained in:
Tordarus 2025-02-04 20:53:42 +01:00
parent 9bc35d2089
commit 21430b0d65

View File

@ -5,7 +5,15 @@ type Result[T any] struct {
err error err error
} }
func ResultOf[T any](value T, err error) Result[T] { func ResultOf[T any](value *T, err error) Result[T] {
if err != nil {
return Result[T]{value: nil, err: err}
}
return Result[T]{value: value, err: nil}
}
func ResultOfValue[T any](value T, err error) Result[T] {
if err != nil { if err != nil {
return Result[T]{value: nil, err: err} return Result[T]{value: nil, err: err}
} }
@ -14,16 +22,15 @@ func ResultOf[T any](value T, err error) Result[T] {
} }
func WrapResultOutputFunc[I, O any](f func(I) (O, error)) func(I) Result[O] { func WrapResultOutputFunc[I, O any](f func(I) (O, error)) func(I) Result[O] {
return func(i I) Result[O] { return ResultOf(f(i)) } return func(i I) Result[O] { return ResultOfValue(f(i)) }
} }
func WrapResultFunc[I, O any](f func(I) (O, error)) func(Result[I]) Result[O] { func WrapResultFunc[I, O any](f func(I) (O, error)) func(Result[I]) Result[O] {
resFunc := WrapResultOutputFunc(f) resFunc := WrapResultOutputFunc(f)
nilValue := *new(O)
return func(r Result[I]) Result[O] { return func(r Result[I]) Result[O] {
v, err := r.Get() v, err := r.Get()
if err != nil { if err != nil {
return ResultOf(nilValue, err) return ResultOf[O](nil, err)
} }
return resFunc(v) return resFunc(v)
} }