ctx_value.go 1.7 KB

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