From 4d974d086f1588a1b0deb9d91929338d0b33be57 Mon Sep 17 00:00:00 2001 From: Levente Batuska Date: Sun, 15 Sep 2024 18:26:32 +0200 Subject: [PATCH] fix: minor fixes to types --- typeutils/interfaces.go | 3 +++ typeutils/utils.go | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/typeutils/interfaces.go b/typeutils/interfaces.go index d8cd06f..28d767a 100644 --- a/typeutils/interfaces.go +++ b/typeutils/interfaces.go @@ -15,6 +15,7 @@ type Unwrappable[T any] interface { // Both an Optional and Result is an Option type Option[T any] interface { + ValueContainer Unwrappable[T] } @@ -23,6 +24,7 @@ type OptionalI[T any] interface { Is_none() bool Ok_or(error) Result[T] Ok_or_else(func() error) Result[T] + Unwrappable[T] } type ResultI[T any] interface { @@ -30,6 +32,7 @@ type ResultI[T any] interface { Is_err() bool Ok() Optional[T] Err() Optional[error] + Unwrappable[T] } // Ensure compile time the interfaces are implemented diff --git a/typeutils/utils.go b/typeutils/utils.go index e7aeed8..84fe131 100644 --- a/typeutils/utils.go +++ b/typeutils/utils.go @@ -20,8 +20,21 @@ func Unwrap_or_else[T any](val Unwrappable[T], f func() T) T { return val.Unwrap_or_else(f) } -// T cannot be inferred // Returns if the underlying data has a Value (false in case of None or Error) func Has_value(val ValueContainer) bool { return val.Has_value() } + +func ResultWrap[T any](val T, err error) Result[T] { + if err == nil { + return Ok(val) + } + return Err[T](err) +} + +func ResultWrapb[T any](err error, val T) Result[T] { + if err == nil { + return Ok(val) + } + return Err[T](err) +}