ctx_value.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // package ctx_value -- потокобезопасное значение локального контекста
  2. package ctx_value
  3. import (
  4. "fmt"
  5. "sync"
  6. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias"
  7. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev1/helpers"
  9. . "gitp78su.ipnodns.ru/svi/kern/v4/lev1/result"
  10. )
  11. // CtxValue -- потокобезопасное значение локального контекста
  12. type CtxValue struct {
  13. sync.RWMutex
  14. key string
  15. createAt ATime
  16. Val_ any
  17. UpdateAt_ ATime
  18. Comment_ string
  19. }
  20. // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста
  21. func NewCtxValue(key string, val any, comment string) IResult[*CtxValue] {
  22. if key == "" {
  23. err := fmt.Errorf("NewCtxValue(): key is empty")
  24. return NewErr[*CtxValue](err)
  25. }
  26. sf := &CtxValue{
  27. key: key,
  28. createAt: helpers.TimeNowStr(),
  29. Val_: val,
  30. Comment_: comment,
  31. }
  32. return 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() ATime {
  46. sf.RLock()
  47. defer sf.RUnlock()
  48. return sf.UpdateAt_
  49. }
  50. // CreateAt -- возвращает время создания значения
  51. func (sf *CtxValue) CreateAt() 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. }