From 21430b0d65aa4bf8d68a9941533c250ca6cdac2d Mon Sep 17 00:00:00 2001 From: Tordarus Date: Tue, 4 Feb 2025 20:53:42 +0100 Subject: [PATCH] refactored ResultOf and ResultOfValue --- result.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/result.go b/result.go index c5ab05d..96af21d 100644 --- a/result.go +++ b/result.go @@ -5,7 +5,15 @@ type Result[T any] struct { 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 { 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] { - 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] { resFunc := WrapResultOutputFunc(f) - nilValue := *new(O) return func(r Result[I]) Result[O] { v, err := r.Get() if err != nil { - return ResultOf(nilValue, err) + return ResultOf[O](nil, err) } return resFunc(v) }