| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package option
- import (
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
- )
- // Option -- результат возможно содержащий nil.
- type Option[T any] struct {
- some *T
- }
- // NewSome - полезный результат.
- func NewSome[T any](value T) *Option[T] {
- helpers.If(helpers.IsNil(value)).Hassert("NewSome[T any](): value==nil")
- sf := &Option[T]{
- some: &value,
- }
- return sf
- }
- // NewNone - нет результата в ответе.
- func NewNone[T any]() *Option[T] {
- return &Option[T]{
- some: nil,
- }
- }
- // IsSome - проверяет, есть ли значение.
- func (sf *Option[T]) IsSome() def_spec_base.Bool {
- return sf.some != nil
- }
- // IsNone - проверяет, есть ли значение.
- func (sf *Option[T]) IsNone() def_spec_base.Bool {
- return sf.some == nil
- }
- // Some - извлекает значение (паника, если None).
- func (sf *Option[T]) Some() T {
- helpers.If(sf.some == nil).Hassert("Option[T].Some(): val==nil!")
- return *sf.some
- }
- // SomeOr - возвращает значение или дефолтное.
- func (sf *Option[T]) SomeOr(defaultValue T) T {
- if sf.some == nil {
- return defaultValue
- }
- return *sf.some
- }
- // SomeOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
- func (sf *Option[T]) SomeOrFn(fn func() T) T {
- helpers.If(fn == nil).Hassert("Option[T].SomeOrFn(): fn==nil")
- if sf.some == nil {
- return fn()
- }
- return *sf.some
- }
- // Hassert -- проверяет, что не пустое значение (с паникой).
- func (sf *Option[T]) Hassert(msgFormat def_spec_base.Txt, args ...any) T {
- helpers.If(sf.some == nil).Hassert(msgFormat, args...)
- return *sf.some
- }
- // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
- func (sf *Option[T]) Assert(msgFormat def_spec_base.Txt, args ...any) T {
- helpers.If(sf.some == nil).Assert(msgFormat, args...)
- return *sf.some
- }
|