aboutsummaryrefslogtreecommitdiffstats
path: root/modules/optional/option.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/optional/option.go')
-rw-r--r--modules/optional/option.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/modules/optional/option.go b/modules/optional/option.go
index af9e5ac852..6075c6347e 100644
--- a/modules/optional/option.go
+++ b/modules/optional/option.go
@@ -3,6 +3,14 @@
package optional
+import "strconv"
+
+// Option is a generic type that can hold a value of type T or be empty (None).
+//
+// It must use the slice type to work with "chi" form values binding:
+// * non-existing value are represented as an empty slice (None)
+// * existing value is represented as a slice with one element (Some)
+// * multiple values are represented as a slice with multiple elements (Some), the Value is the first element (not well-defined in this case)
type Option[T any] []T
func None[T any]() Option[T] {
@@ -43,3 +51,12 @@ func (o Option[T]) ValueOrDefault(v T) T {
}
return v
}
+
+// ParseBool get the corresponding optional.Option[bool] of a string using strconv.ParseBool
+func ParseBool(s string) Option[bool] {
+ v, e := strconv.ParseBool(s)
+ if e != nil {
+ return None[bool]()
+ }
+ return Some(v)
+}