def_bool_mut.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. sf.CheckOwner()
  37. strVal := os.Getenv(string(env))
  38. if strVal == "" {
  39. err := def_err.LetErr(sf.Owner(), "MBool.FromEnv(): env(%v) not set", env)
  40. return result.ResErr[*LBool](err)
  41. }
  42. strVal = strings.ToLower(strVal)
  43. switch strVal {
  44. case "true", "yes", "y", "1":
  45. sf.val = true
  46. case "false", "no", "n", "0":
  47. sf.val = false
  48. default:
  49. err := def_err.LetErr(sf.Owner(),"MBool.FromEnv(): env(%v) not set", env)
  50. return result.ResErr[*LBool](err)
  51. }
  52. return result.ResOk(sf.Let())
  53. }