package def_bool import ( "os" "strings" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_err" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner" "gitp78su.ipnodns.ru/svi/kern/v4/d0/result" ) // MBool -- внутренне изменяемое булево. type MBool struct { *LBool } // MutBool -- возвращает новый внутрений изменяемый Bool. func MutBool[T def_spec_base.BoolConstraint](owner *owner.LOwner, val T) *MBool { sf := &MBool{ LBool: LetBool(owner, val), } return sf } // Set -- устанавливает новое значение. func (sf *MBool) Set() { sf.CheckOwner() sf.val = true } // Reset -- сбрасывает новое значение. func (sf *MBool) Reset() { sf.CheckOwner() sf.val = false } // FromEnv -- получает значение из окружения. // // АХТУНГ!!! // Может быть небезопасно!!! func (sf *MBool) FromEnv(env def_spec_base.Txt) *result.Result[*LBool] { strVal := os.Getenv(string(env)) if strVal == "" { err := def_err.LetErr("MBool.FromEnv(): env(%v) not set", env) return result.ResErr[*LBool](err) } strVal = strings.ToLower(strVal) switch strVal { case "true", "yes", "y", "1": sf.val = true case "false", "no", "n", "0": sf.val = false default: err := def_err.LetErr("MBool.FromEnv(): env(%v) not set", env) return result.ResErr[*LBool](err) } return result.ResOk(sf.Let()) }