60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
|
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()
|
||
|
}
|