41 lines
876 B
Go
41 lines
876 B
Go
package ucontainer
|
|
|
|
// Option can either hold a value, or nothing.
|
|
type Option[T any] struct {
|
|
value T
|
|
exists bool
|
|
}
|
|
|
|
// O creates a new option with the specified value.
|
|
func O[T any] (value T) Option[T] {
|
|
return Option[T] {
|
|
value: value,
|
|
exists: true,
|
|
}
|
|
}
|
|
|
|
// Void returns an option with no value.
|
|
func Void[T any] () Option[T] {
|
|
return Option[T] { }
|
|
}
|
|
|
|
// Exists returns if the value is currently set.
|
|
func (option Option[T]) Exists () bool {
|
|
return option.exists
|
|
}
|
|
|
|
// Value returns the value and true if the value exists. If not, it returns the
|
|
// zero value and false.
|
|
func (option Option[T]) Value () (T, bool) {
|
|
return option.value, option.exists
|
|
}
|
|
|
|
// Default returns the value if it exists, and the specified default value
|
|
// otherwise.
|
|
func (option Option[T]) Default(defaul T) T {
|
|
if value, ok := option.Value(); ok {
|
|
return value
|
|
}
|
|
return defaul
|
|
}
|