2025-01-20 16:45:56 -07:00
|
|
|
package hopp
|
|
|
|
|
|
|
|
import "git.tebibyte.media/sashakoshka/go-util/container"
|
|
|
|
|
2025-01-21 14:20:40 -07:00
|
|
|
// Option allows an optional value to be defined without using a pointer.
|
2025-01-20 16:45:56 -07:00
|
|
|
// TODO make generic alias once go 1.24 releases
|
|
|
|
type Option[T any] ucontainer.Optional[T]
|
2025-01-21 14:20:40 -07:00
|
|
|
|
2025-01-22 14:56:46 -07:00
|
|
|
func O[T any](value T) Option[T] {
|
|
|
|
return Option[T](ucontainer.O(value))
|
|
|
|
}
|
|
|
|
|
2025-01-22 15:40:33 -07:00
|
|
|
func Void[T any]() Option[T] {
|
|
|
|
return Option[T](ucontainer.Void[T]())
|
2025-01-21 14:20:40 -07:00
|
|
|
}
|
|
|
|
|
2025-01-22 15:40:33 -07:00
|
|
|
func (option Option[T]) Ok() bool {
|
|
|
|
return (ucontainer.Optional[T])(option).Exists()
|
2025-01-21 14:20:40 -07:00
|
|
|
}
|
|
|
|
|
2025-01-22 15:40:33 -07:00
|
|
|
func (option Option[T]) Get() (T, bool) {
|
|
|
|
return (ucontainer.Optional[T])(option).Value()
|
2025-01-21 14:20:40 -07:00
|
|
|
}
|
2025-01-22 20:23:02 -07:00
|
|
|
|
|
|
|
func (option Option[T]) Default(defaul T) T {
|
|
|
|
if value, ok := option.Get(); ok {
|
|
|
|
return value
|
|
|
|
}
|
|
|
|
return defaul
|
|
|
|
}
|