def_mut_bool.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package def_bool
  2. import (
  3. "os"
  4. "strings"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_err"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/d0/result"
  9. )
  10. // MBool -- внутренне изменяемое булево.
  11. type MBool struct {
  12. *LBool
  13. }
  14. // MutBool -- возвращает новый внутрений изменяемый Bool.
  15. func MutBool[T def_spec_base.BoolConstraint](owner *owner.LOwner, val T) *MBool {
  16. sf := &MBool{
  17. LBool: LetBool(owner, val),
  18. }
  19. return sf
  20. }
  21. // Set -- устанавливает новое значение.
  22. func (sf *MBool) Set() {
  23. sf.CheckOwner()
  24. sf.val = true
  25. }
  26. // Reset -- сбрасывает новое значение.
  27. func (sf *MBool) Reset() {
  28. sf.CheckOwner()
  29. sf.val = false
  30. }
  31. // FromEnv -- получает значение из окружения.
  32. //
  33. // АХТУНГ!!!
  34. // Может быть небезопасно!!!
  35. func (sf *MBool) FromEnv(env def_spec_base.Txt) *result.Result[*LBool] {
  36. strVal := os.Getenv(string(env))
  37. if strVal == "" {
  38. err := def_err.LetErr("MBool.FromEnv(): env(%v) not set", env)
  39. return result.ResErr[*LBool](err)
  40. }
  41. strVal = strings.ToLower(strVal)
  42. switch strVal {
  43. case "true", "yes", "y", "1":
  44. sf.val = true
  45. case "false", "no", "n", "0":
  46. sf.val = false
  47. default:
  48. err := def_err.LetErr("MBool.FromEnv(): env(%v) not set", env)
  49. return result.ResErr[*LBool](err)
  50. }
  51. return result.ResOk(sf.Let())
  52. }