initial option and result

This commit is contained in:
2025-06-06 09:59:12 -04:00
committed by Zachary King
parent 039ca3b6f0
commit 7239eca2e5
3 changed files with 90 additions and 0 deletions

47
option.go Normal file
View File

@@ -0,0 +1,47 @@
package util
import "errors"
type Option[T any] struct {
value *T
}
var ErrOptionIsNone = errors.New("gonads: Option[T] has no value")
func NewOption[T any]() *Option[T] {
return &Option[T]{}
}
func (o Option[T]) IsSome() bool {
return o.value != nil
}
func (o Option[T]) IsNone() bool {
return !o.IsSome()
}
func (o Option[T]) Take() (T, error) {
if o.IsNone() {
var zero T
return zero, ErrOptionIsNone
}
return *o.value, nil
}
func (o *Option[T]) Set(val T) {
o.value = &val
}
func (o *Option[T]) Clear() {
o.value = nil
}
func (o Option[T]) Yank() T {
if o.IsNone() {
panic("Yank on None Option")
}
return *o.value
}