aboutsummaryrefslogtreecommitdiff
path: root/options
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2025-01-11 12:23:31 +0100
committerStefan Majewsky <majewsky@gmx.net>2025-01-11 12:23:31 +0100
commit7eec3798588243c493791a421e6224680870d0e2 (patch)
treee6893f9c883c2e3d4d453ae3d54756b13c32e222 /options
parent49a7790edc4ec9526a7b846399339068990ce7de (diff)
downloadgo-gg-7eec3798588243c493791a421e6224680870d0e2.tar.gz
add options.IsNoneOrZero
Also, add the tests for IsSomeAnd and IsNoneOr that I forgot.
Diffstat (limited to 'options')
-rw-r--r--options/options.go8
-rw-r--r--options/options_test.go6
2 files changed, 14 insertions, 0 deletions
diff --git a/options/options.go b/options/options.go
index e058559..9754e2d 100644
--- a/options/options.go
+++ b/options/options.go
@@ -20,3 +20,11 @@ func FromPointer[T any](value *T) Option[T] {
return Some(*value)
}
}
+
+// IsNoneOrZero returns whether the Option is either empty, or contains a zero value.
+func IsNoneOrZero[T comparable](o Option[T]) bool {
+ return o.IsNoneOr(func(value T) bool {
+ var zero T
+ return zero == value
+ })
+}
diff --git a/options/options_test.go b/options/options_test.go
index 69a4b43..9947b9d 100644
--- a/options/options_test.go
+++ b/options/options_test.go
@@ -17,3 +17,9 @@ func TestFromPointer(t *testing.T) {
AssertEqual(t, FromPointer[int](nil), None[int]())
AssertEqual(t, FromPointer(PointerTo[int](42)), Some(42))
}
+
+func TestIsNoneOrZero(t *testing.T) {
+ AssertEqual(t, IsNoneOrZero(None[int]()), true)
+ AssertEqual(t, IsNoneOrZero(Some(0)), true)
+ AssertEqual(t, IsNoneOrZero(Some(1)), false)
+}