42 lines
574 B
Go
42 lines
574 B
Go
package option
|
|
|
|
type Option[T any] struct {
|
|
hasValue bool
|
|
value T
|
|
}
|
|
|
|
func Some[T any](value T) Option[T] {
|
|
return Option[T]{
|
|
hasValue: true,
|
|
value: value,
|
|
}
|
|
}
|
|
|
|
func None[T any]() Option[T] {
|
|
return Option[T]{
|
|
hasValue: false,
|
|
}
|
|
}
|
|
|
|
func (o Option[T]) IsSome() bool {
|
|
return o.hasValue
|
|
}
|
|
|
|
func (o Option[T]) IsNone() bool {
|
|
return !o.hasValue
|
|
}
|
|
|
|
func (o Option[T]) Value() T {
|
|
if !o.hasValue {
|
|
panic("Option has no value")
|
|
}
|
|
return o.value
|
|
}
|
|
|
|
func (o Option[T]) ValueOr(defaultValue T) T {
|
|
if !o.hasValue {
|
|
return defaultValue
|
|
}
|
|
return o.value
|
|
}
|