refactor(typeutils)!: refactor to pointer receivers
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package typeutils
|
||||
|
||||
import "github.com/lbatuska/goutils/assert"
|
||||
|
||||
// CTORS BEGIN
|
||||
func Some[T any](value T) Optional[T] {
|
||||
return Optional[T]{value, true}
|
||||
@@ -16,44 +18,68 @@ func None_t[T any](T) Optional[T] {
|
||||
|
||||
// CTORS END
|
||||
|
||||
func (opt Optional[T]) IsSome() bool { return opt.present }
|
||||
func (opt Optional[T]) IsNone() bool { return !opt.present }
|
||||
func (opt *Optional[T]) IsSome() bool {
|
||||
if opt == nil {
|
||||
return false
|
||||
}
|
||||
return opt.present
|
||||
}
|
||||
|
||||
func (opt Optional[T]) HasValue() bool { return opt.IsSome() }
|
||||
func (opt *Optional[T]) IsNone() bool {
|
||||
if opt == nil {
|
||||
return true
|
||||
}
|
||||
return !opt.present
|
||||
}
|
||||
|
||||
func (opt *Optional[T]) HasValue() bool {
|
||||
if opt == nil {
|
||||
return false
|
||||
}
|
||||
return opt.IsSome()
|
||||
}
|
||||
|
||||
// UNWRAPPABLE INTERFACE BEGIN
|
||||
func (opt Optional[T]) Expect(msg string) T {
|
||||
func (opt *Optional[T]) Expect(msg string) T {
|
||||
assert.NotNil(opt)
|
||||
if opt.present {
|
||||
return opt.value
|
||||
}
|
||||
panic(msg)
|
||||
}
|
||||
|
||||
func (opt Optional[T]) Unwrap() T {
|
||||
func (opt *Optional[T]) Unwrap() T {
|
||||
assert.NotNil(opt)
|
||||
if opt.present {
|
||||
return opt.value
|
||||
}
|
||||
panic("Tried unwrapping an Optional that did not have a value!")
|
||||
}
|
||||
|
||||
func (opt Optional[T]) UnwrapOr(val T) T {
|
||||
if opt.present {
|
||||
return opt.value
|
||||
func (opt *Optional[T]) UnwrapOr(val T) T {
|
||||
if opt != nil {
|
||||
if opt.present {
|
||||
return opt.value
|
||||
}
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
func (opt Optional[T]) UnwrapOrDefault() T {
|
||||
if opt.present {
|
||||
return opt.value
|
||||
func (opt *Optional[T]) UnwrapOrDefault() T {
|
||||
if opt != nil {
|
||||
if opt.present {
|
||||
return opt.value
|
||||
}
|
||||
}
|
||||
var res T
|
||||
return res
|
||||
}
|
||||
|
||||
func (opt Optional[T]) UnwrapOrElse(f func() T) T {
|
||||
if opt.present {
|
||||
return opt.value
|
||||
func (opt *Optional[T]) UnwrapOrElse(f func() T) T {
|
||||
if opt != nil {
|
||||
if opt.present {
|
||||
return opt.value
|
||||
}
|
||||
}
|
||||
return f()
|
||||
}
|
||||
@@ -61,17 +87,22 @@ func (opt Optional[T]) UnwrapOrElse(f func() T) T {
|
||||
// UNWRAPPABLE INTERFACE END
|
||||
|
||||
// transforms Some(v) to Ok(v), and None to Err(err)
|
||||
func (opt Optional[T]) OkOr(err error) Result[T] {
|
||||
if opt.present {
|
||||
return Ok(opt.value)
|
||||
func (opt *Optional[T]) OkOr(err error) Result[T] {
|
||||
if opt != nil {
|
||||
if opt.present {
|
||||
return Ok(opt.value)
|
||||
}
|
||||
}
|
||||
|
||||
return Err[T](err)
|
||||
}
|
||||
|
||||
// transforms Some(v) to Ok(v), and None to a value of Err using the provided function
|
||||
func (opt Optional[T]) OkOrElse(f func() error) Result[T] {
|
||||
if opt.present {
|
||||
return Ok(opt.value)
|
||||
func (opt *Optional[T]) OkOrElse(f func() error) Result[T] {
|
||||
if opt != nil {
|
||||
if opt.present {
|
||||
return Ok(opt.value)
|
||||
}
|
||||
}
|
||||
return Err[T](f())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user