incredible-go-core/pkg/container/optional/optional_methods.go

60 lines
1.1 KiB
Go
Raw Normal View History

2024-06-25 11:35:10 +02:00
package optional
import "log"
func (self *Optional[T]) IfPresent(action func(T)) {
if self.Present {
action(self.Value)
}
}
func (self *Optional[T]) OrElsePanic(err error) T {
return self.OrElsePanicF(func() error {
return err
})
}
func (self *Optional[T]) OrElsePanicF(errorSupplier func() error) T {
if self.Present {
return self.Value
}
err := errorSupplier()
panic(err)
}
func (self *Optional[T]) OrElseFatal(err error) T {
return self.OrElseFatalF(func() error {
return err
})
}
func (self *Optional[T]) OrElseFatalF(errorSupplier func() error) T {
if self.Present {
return self.Value
}
err := errorSupplier()
var returnStub T
log.Fatal(err)
// Компилятор без return не пропустит, но сюда никогда не дойдет из-за фатала выше.
return returnStub
}
func (self *Optional[T]) OrElse(defaultValue T) T {
if self.Present {
return self.Value
}
return defaultValue
}
func (self *Optional[T]) OrElseGet(defaultValueSupplier func() T) T {
if self.Present {
return self.Value
}
return defaultValueSupplier()
}