| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // package safe_string -- потокобезопасная строка.
- package safe_string
- import (
- "fmt"
- "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.Str
- }
- // NewSafeString -- возвращает новую потокобезопасную строку.
- func NewSafeString() mKs.ISafeString {
- sf := &safeString{}
- return sf
- }
- // NewSafeStringGetenv -- возвращает новую потокобезопасную строку из окружения.
- func NewSafeStringGetenv(env defs.Str) mL0.IResult[mKs.ISafeString] {
- sf := NewSafeString()
- res := sf.Getenv(env)
- if res.IsErr() {
- err := fmt.Errorf("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 []byte(sf.val)
- }
- // Get -- возвращает хранимую строку.
- func (sf *safeString) Get() defs.Str {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val
- }
- // Set -- устанавливает строку.
- func (sf *safeString) Set(val defs.Str) {
- sf.Lock()
- defer sf.Unlock()
- sf.val = val
- }
- // Reset -- сбрасывает строку.
- func (sf *safeString) Reset() {
- sf.Lock()
- defer sf.Unlock()
- sf.val = ""
- }
- // Getenv -- получает значение из окружения.
- func (sf *safeString) Getenv(env defs.Str) mL0.IResult[defs.Str] {
- strVal := os.Getenv(env.String())
- if strVal == "" {
- err := fmt.Errorf("safeString.Getenv(): from env(%v), val is empty", env)
- return mL0.NewErr[defs.Str](err)
- }
- sf.val = defs.Str(strVal)
- return mL0.NewOk(sf.val)
- }
|