From b2e47ccf681fa439c0f1afe0093ae97afbbc9a12 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Fri, 18 Aug 2023 18:20:50 +0800 Subject: [PATCH 1/4] Create basic generic nullable package --- internal/nullable/nullable.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 internal/nullable/nullable.go diff --git a/internal/nullable/nullable.go b/internal/nullable/nullable.go new file mode 100644 index 0000000..431fcfe --- /dev/null +++ b/internal/nullable/nullable.go @@ -0,0 +1,26 @@ +package nullable + +type nullable interface { + bool | int | string +} + +type Value[T nullable] struct { + Value T + IsSet bool +} + +func From[T nullable](value T) Value[T] { + return Value[T]{value, true} +} + +func Null[T nullable]() Value[T] { + var null T + return Value[T]{null, false} +} + +func FromPtr[T nullable](value *T) Value[T] { + if value == nil { + return Null[T]() + } + return From[T](*value) +} From 1477d411e900873f89bd5c361c5ccc036da8b602 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Fri, 18 Aug 2023 18:23:01 +0800 Subject: [PATCH 2/4] Reorder functions --- internal/nullable/nullable.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/nullable/nullable.go b/internal/nullable/nullable.go index 431fcfe..611840b 100644 --- a/internal/nullable/nullable.go +++ b/internal/nullable/nullable.go @@ -9,15 +9,15 @@ type Value[T nullable] struct { IsSet bool } -func From[T nullable](value T) Value[T] { - return Value[T]{value, true} -} - func Null[T nullable]() Value[T] { var null T return Value[T]{null, false} } +func From[T nullable](value T) Value[T] { + return Value[T]{value, true} +} + func FromPtr[T nullable](value *T) Value[T] { if value == nil { return Null[T]() From 691053797beeeaf4a5d0728d552d9ff652c7c0c8 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Fri, 18 Aug 2023 18:23:29 +0800 Subject: [PATCH 3/4] Make fields private --- internal/nullable/nullable.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/nullable/nullable.go b/internal/nullable/nullable.go index 611840b..74cda71 100644 --- a/internal/nullable/nullable.go +++ b/internal/nullable/nullable.go @@ -5,8 +5,8 @@ type nullable interface { } type Value[T nullable] struct { - Value T - IsSet bool + value T + isSet bool } func Null[T nullable]() Value[T] { From 93d6a95348cf9a7ed4d51c26677a44d4d718c3ea Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Fri, 18 Aug 2023 18:24:06 +0800 Subject: [PATCH 4/4] Rename parameter --- internal/nullable/nullable.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/nullable/nullable.go b/internal/nullable/nullable.go index 74cda71..15b7abe 100644 --- a/internal/nullable/nullable.go +++ b/internal/nullable/nullable.go @@ -18,9 +18,9 @@ func From[T nullable](value T) Value[T] { return Value[T]{value, true} } -func FromPtr[T nullable](value *T) Value[T] { - if value == nil { +func FromPtr[T nullable](ptr *T) Value[T] { + if ptr == nil { return Null[T]() } - return From[T](*value) + return From[T](*ptr) }