| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // package safe_txt -- потокобезопасный внутренний текст.
- package safe_txt
- import (
- "os"
- "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/def_txt"
- "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/safe_mutex"
- "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner"
- "gitp78su.ipnodns.ru/svi/kern/v4/d0/result"
- )
- // MSafeTxt -- потокобезопасный внутренний текст.
- type MSafeTxt struct {
- *safe_mutex.MSafeMutex
- val *def_txt.MTxt
- }
- // MutSafeTxt -- возвращает новую потокобезопасный внутренний текст.
- func MutSafeTxt[T def_spec_base.TxtConstraint](owner *owner.LOwner, txt T, arg ...any) *MSafeTxt {
- sf := &MSafeTxt{
- MSafeMutex: safe_mutex.MutSafeMutex(),
- val: def_txt.MutTxt(owner, txt, arg...),
- }
- return sf
- }
- // MutSafeTxtFromEnv -- возвращает новую потокобезопасный внутрений текст из окружения.
- func MutSafeTxtFromEnv(owner *owner.LOwner, env *def_txt.LTxt) *result.Result[*MSafeTxt] {
- sf := MutSafeTxt(owner, "")
- res := sf.FromEnv(env)
- if res.IsErr() {
- err := def_err.LetErr(owner, "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(sf.val.Owner(), "safeString.Getenv(): from env(%v), val is empty", env)
- return result.ResErr[*def_txt.LTxt](err)
- }
- sf.val = def_txt.MutTxt(sf.val.Owner(), 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)
- }
|