30 lines
361 B
Go
30 lines
361 B
Go
package option
|
|
|
|
type Option[T any] struct {
|
|
v T
|
|
valid bool
|
|
}
|
|
|
|
func Some[T any](v T) Option[T] {
|
|
return Option[T]{
|
|
v: v,
|
|
valid: true,
|
|
}
|
|
}
|
|
|
|
func None[T any]() Option[T] {
|
|
return Option[T]{}
|
|
}
|
|
|
|
func (o Option[T]) IsSome() bool {
|
|
return o.valid
|
|
}
|
|
|
|
func (o Option[T]) IsNone() bool {
|
|
return !o.valid
|
|
}
|
|
|
|
func (o Option[T]) Take() T {
|
|
return o.v
|
|
}
|