| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // package safe_string -- потокобезопасная строка.
- package safe_string
- import (
- "os"
- "sync"
- mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
- )
- // safeString -- потокобезопасная строка.
- type safeString struct {
- sync.RWMutex
- val defs.ITxtMut
- }
- // NewSafeString -- возвращает новую потокобезопасную строку.
- func NewSafeString() mKs.ISafeString {
- sf := &safeString{}
- return sf
- }
- // NewSafeStringGetenv -- возвращает новую потокобезопасную строку из окружения.
- func NewSafeStringGetenv(env defs.ITxtFix) mL0.IResult[mKs.ISafeString] {
- sf := NewSafeString()
- res := sf.Getenv(env)
- if res.IsErr() {
- err := defs.Err("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
- return mL0.NewErr[mKs.ISafeString](err)
- }
- return mL0.NewOk(sf)
- }
- // Byte -- возвращает байтовое представление строки.
- func (sf *safeString) Byte() []byte {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val.Byte()
- }
- // Get -- возвращает хранимую строку.
- func (sf *safeString) Get() defs.ITxtMut {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val
- }
- // Set -- устанавливает строку.
- func (sf *safeString) Set(val defs.ITxtMut) {
- sf.Lock()
- defer sf.Unlock()
- sf.val = val
- }
- // Reset -- сбрасывает строку.
- func (sf *safeString) Reset() {
- sf.Lock()
- defer sf.Unlock()
- sf.val.Set("")
- }
- // Getenv -- получает значение из окружения.
- func (sf *safeString) Getenv(env defs.ITxtFix) mL0.IResult[defs.ITxtFix] {
- txtVal := defs.ATxt(os.Getenv(env.String()))
- if txtVal == "" {
- err := defs.Err("safeString.Getenv(): from env(%v), val is empty", env)
- return mL0.NewErr[defs.ITxtFix](err)
- }
- sf.val = defs.Txt(txtVal)
- return mL0.NewOk(defs.ITxtFix(sf.val))
- }
|