ctx_value.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // package ctx_value -- потокобезопасное значение локального контекста.
  2. package ctx_value
  3. import (
  4. "fmt"
  5. "sync"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  7. mKa "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias"
  8. kt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  9. mKr "gitp78su.ipnodns.ru/svi/kern/v4/lev1/result"
  10. )
  11. // CtxValue -- потокобезопасное значение локального контекста.
  12. type CtxValue struct {
  13. sync.RWMutex
  14. key string
  15. createAt mKa.ATime
  16. Val_ any
  17. UpdateAt_ mKa.ATime
  18. Comment_ string
  19. }
  20. // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
  21. func NewCtxValue(key string, val any, comment string) kt.IResult[*CtxValue] {
  22. if key == "" {
  23. err := fmt.Errorf("NewCtxValue(): key is empty")
  24. return mKr.NewErr[*CtxValue](err)
  25. }
  26. sf := &CtxValue{
  27. key: key,
  28. createAt: helpers.TimeNowStr(),
  29. Val_: val,
  30. Comment_: comment,
  31. }
  32. return mKr.NewRes(sf)
  33. }
  34. // Key -- возвращает ключ значения.
  35. func (sf *CtxValue) Key() string {
  36. return sf.key
  37. }
  38. // Val -- возвращает хранимое значение.
  39. func (sf *CtxValue) Val() any {
  40. sf.RLock()
  41. defer sf.RUnlock()
  42. return sf.Val_
  43. }
  44. // UpdateAt -- возвращает время обновления значения.
  45. func (sf *CtxValue) UpdateAt() mKa.ATime {
  46. sf.RLock()
  47. defer sf.RUnlock()
  48. return sf.UpdateAt_
  49. }
  50. // CreateAt -- возвращает время создания значения.
  51. func (sf *CtxValue) CreateAt() mKa.ATime {
  52. return sf.createAt
  53. }
  54. // Comment -- возвращает комментарий значения.
  55. func (sf *CtxValue) Comment() string {
  56. sf.RLock()
  57. defer sf.RUnlock()
  58. return sf.Comment_
  59. }