| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // package safe_string -- потокобезопасная строка.
- package safe_string
- import (
- "os"
- "sync"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- )
- // safeString -- потокобезопасная строка.
- type safeString struct {
- sync.RWMutex
- val *lev0.MTxt
- }
- // NewSafeString -- возвращает новую потокобезопасную строку.
- func NewSafeString() lev0.ISafeString {
- sf := &safeString{}
- return sf
- }
- // NewSafeStringGetenv -- возвращает новую потокобезопасную строку из окружения.
- func NewSafeStringGetenv(env *lev0.LTxt) *lev0.Result[lev0.ISafeString] {
- sf := NewSafeString()
- res := sf.Getenv(env)
- if res.IsErr() {
- err := lev0.LetErr("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
- return lev0.ResErr[lev0.ISafeString](err)
- }
- return lev0.ResOk(sf)
- }
- // Byte -- возвращает байтовое представление строки.
- func (sf *safeString) Byte() []byte {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.Byte()
- }
- // Get -- возвращает хранимую строку.
- func (sf *safeString) Get() *lev0.LTxt {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.Let()
- }
- // Set -- устанавливает строку.
- func (sf *safeString) Set(val *lev0.LTxt) {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Set(val.Get())
- }
- // Reset -- сбрасывает строку.
- func (sf *safeString) Reset() {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Set("")
- }
- // Getenv -- получает значение из окружения.
- func (sf *safeString) Getenv(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())
- }
|