diff --git a/internal/nullable/nullable.go b/internal/nullable/nullable.go new file mode 100644 index 0000000..15b7abe --- /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 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](ptr *T) Value[T] { + if ptr == nil { + return Null[T]() + } + return From[T](*ptr) +}