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