// package ctx_value -- потокобезопасное значение локального контекста. package ctx_value import ( "fmt" "sync" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" mKa "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias" kt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes" mKr "gitp78su.ipnodns.ru/svi/kern/v4/lev1/result" ) // CtxValue -- потокобезопасное значение локального контекста. type CtxValue struct { sync.RWMutex key string createAt mKa.ATime Val_ any UpdateAt_ mKa.ATime Comment_ string } // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста. func NewCtxValue(key string, val any, comment string) kt.IResult[*CtxValue] { if key == "" { err := fmt.Errorf("NewCtxValue(): key is empty") return mKr.NewErr[*CtxValue](err) } sf := &CtxValue{ key: key, createAt: helpers.TimeNowStr(), Val_: val, Comment_: comment, } return mKr.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() mKa.ATime { sf.RLock() defer sf.RUnlock() return sf.UpdateAt_ } // CreateAt -- возвращает время создания значения. func (sf *CtxValue) CreateAt() mKa.ATime { return sf.createAt } // Comment -- возвращает комментарий значения. func (sf *CtxValue) Comment() string { sf.RLock() defer sf.RUnlock() return sf.Comment_ }