| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // package safe_txt -- потокобезопасный внутренний текст.
- package safe_txt
- import (
- "os"
- "sync"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_err"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_txt"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
- )
- // MSafeTxt -- потокобезопасный внутренний текст.
- type MSafeTxt struct {
- sync.RWMutex
- val *def_txt.MTxt
- }
- // MutSafeTxt -- возвращает новую потокобезопасный внутренний текст.
- func MutSafeTxt[T def_spec_base.TxtConstraint](txt T, arg ...any) *MSafeTxt {
- sf := &MSafeTxt{
- val: def_txt.MutTxt(txt, arg...),
- }
- return sf
- }
- // MutSafeTxtFromEnv -- возвращает новую потокобезопасный внутрений текст из окружения.
- func MutSafeTxtFromEnv(env *def_txt.LTxt) *result.Result[*MSafeTxt] {
- sf := MutSafeTxt("")
- res := sf.FromEnv(env)
- if res.IsErr() {
- err := def_err.LetErr("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
- return result.ResErr[*MSafeTxt](err)
- }
- return result.ResOk(sf)
- }
- // Byte -- возвращает байтовое представление текста.
- func (sf *MSafeTxt) Byte() []byte {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.Byte()
- }
- // Get -- возвращает хранимый текст.
- func (sf *MSafeTxt) Get() *def_txt.LTxt {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.Let()
- }
- // Set -- устанавливает текст.
- func (sf *MSafeTxt) Set(val *def_txt.LTxt) {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Set(val.Get())
- }
- // Reset -- сбрасывает текст.
- func (sf *MSafeTxt) Reset() {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Set("")
- }
- // FromEnv -- получает значение из окружения.
- func (sf *MSafeTxt) FromEnv(env *def_txt.LTxt) *result.Result[*def_txt.LTxt] {
- sf.Lock()
- defer sf.Unlock()
- txtVal := def_spec_base.Txt(os.Getenv(env.String()))
- if txtVal == "" {
- err := def_err.LetErr("safeString.Getenv(): from env(%v), val is empty", env)
- return result.ResErr[*def_txt.LTxt](err)
- }
- sf.val = def_txt.MutTxt(txtVal)
- return result.ResOk(sf.val.Let())
- }
- // TrimSuffix -- обрезает суффикс хранимаого текста
- func (sf *MSafeTxt) TrimSuffix(txt def_spec_base.Txt) def_spec_base.Txt {
- sf.Lock()
- defer sf.Unlock()
- return sf.val.TrimSuffix(txt)
- }
|