// package ctx_value -- потокобезопасное значение локального контекста. package ctx_value import ( "fmt" "sync" mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/alias" ) // CtxValue -- потокобезопасное значение локального контекста. type CtxValue struct { sync.RWMutex key string createAt *alias.ATime Val_ any UpdateAt_ *alias.ATime Comment_ string } // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста. func NewCtxValue(key string, val any, comment string) *mL0.Result[*CtxValue] { if key == "" { err := fmt.Errorf("NewCtxValue(): key is empty") return mL0.NewErr[*CtxValue](err) } sf := &CtxValue{ key: key, createAt: alias.NewATime(), Val_: val, Comment_: comment, } return mL0.NewRes(sf) } // Key -- возвращает ключ значения. func (sf *CtxValue) Key() string { return sf.key } // Val -- возвращает хранимое значение. func (sf *CtxValue) Val() any { sf.RLock() defer sf.RUnlock() return sf.Val_ } // UpdateAt -- возвращает время обновления значения. func (sf *CtxValue) UpdateAt() *alias.ATime { sf.RLock() defer sf.RUnlock() return sf.UpdateAt_ } // CreateAt -- возвращает время создания значения. func (sf *CtxValue) CreateAt() *alias.ATime { return sf.createAt } // Comment -- возвращает комментарий значения. func (sf *CtxValue) Comment() string { sf.RLock() defer sf.RUnlock() return sf.Comment_ }