diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2025-01-11 16:13:00 +0100 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2025-01-11 16:13:00 +0100 |
| commit | e739523ac1f926007fcfd8d82e5559df37cc6c6b (patch) | |
| tree | d994348fd95b091d9966dc7c36f891bef86b1fb6 /options | |
| parent | 7eec3798588243c493791a421e6224680870d0e2 (diff) | |
| download | go-gg-e739523ac1f926007fcfd8d82e5559df37cc6c6b.tar.gz | |
add options.Map()
Diffstat (limited to 'options')
| -rw-r--r-- | options/options.go | 11 | ||||
| -rw-r--r-- | options/options_test.go | 6 |
2 files changed, 16 insertions, 1 deletions
diff --git a/options/options.go b/options/options.go index 9754e2d..bfae710 100644 --- a/options/options.go +++ b/options/options.go @@ -21,10 +21,19 @@ func FromPointer[T any](value *T) Option[T] { } } -// IsNoneOrZero returns whether the Option is either empty, or contains a zero value. +// IsNoneOrZero returns whether o 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 }) } + +// Map applies the given function to the value contained in o, if there is one. +func Map[T, U any](o Option[T], mapping func(T) U) Option[U] { + if t, ok := o.Unpack(); ok { + return Some(mapping(t)) + } else { + return None[U]() + } +} diff --git a/options/options_test.go b/options/options_test.go index 9947b9d..caeb303 100644 --- a/options/options_test.go +++ b/options/options_test.go @@ -7,6 +7,7 @@ package options import ( + "strconv" "testing" . "github.com/majewsky/gg/internal/test" @@ -23,3 +24,8 @@ func TestIsNoneOrZero(t *testing.T) { AssertEqual(t, IsNoneOrZero(Some(0)), true) AssertEqual(t, IsNoneOrZero(Some(1)), false) } + +func TestMap(t *testing.T) { + AssertEqual(t, Map(None[int](), strconv.Itoa), None[string]()) + AssertEqual(t, Map(Some(42), strconv.Itoa), Some("42")) +} |
