rec_meta.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // package rec_meta -- мета-информация записи KV-хранилища.
  2. package rec_meta
  3. import (
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
  8. )
  9. var (
  10. hassert = helpers.Hassert
  11. )
  12. // RecMeta -- мета-информация записи KV-хранилища.
  13. //
  14. // Вся информация о записи хранится в JSON-строке, без форматирования
  15. // для того, что можно было файл индексов бакета писать построчно.
  16. // Даже если ключ содержит пробелы или экранированное форматирование
  17. // JSON их экранирует внутри.
  18. type RecMeta struct {
  19. Key_ *store_key.AStoreKey `json:"key"` // Ключ
  20. Vers_ int64 `json:"vers"` // Версия записи
  21. Operation_ string `json:"operation"` // Тип операции над записью
  22. createdAt_ kspec.ITime `voc:"created_at"` // Дата создания записи
  23. updateAt_ kspec.ITimeMut `voc:"update_at"` // Дата последнего обновления
  24. // Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
  25. Sha_ string `json:"sha"`
  26. Offset_ int64 `json:"-"` // Смещение в файле, игнорируется при записи
  27. }
  28. // NewRecMeta -- создание новой мета-информации записи KV-хранилища.
  29. func NewRecMeta(key *store_key.AStoreKey) *RecMeta {
  30. hassert(key != nil, "NewRecMeta: key==nil")
  31. sf := &RecMeta{
  32. Key_: key,
  33. Vers_: 1,
  34. Operation_: "create",
  35. createdAt_: etime.NewETimeAuto(),
  36. updateAt_: etime.NewETimeAutoMut(),
  37. }
  38. _ = kspec.IRecMeta(sf)
  39. return sf
  40. }
  41. // Key -- ключ записи.
  42. //
  43. //go:fix inline
  44. func (sf *RecMeta) Key() *store_key.AStoreKey {
  45. return sf.Key_
  46. }
  47. // Vers -- версия записи.
  48. //
  49. //go:fix inline
  50. func (sf *RecMeta) Vers() int64 {
  51. return sf.Vers_
  52. }
  53. // Operation -- тип операции над записью.
  54. //
  55. //go:fix inline
  56. func (sf *RecMeta) Operation() string {
  57. return sf.Operation_
  58. }
  59. // CreatedAt -- дата создания записи.
  60. //
  61. //go:fix inline
  62. func (sf *RecMeta) CreatedAt() kspec.ITime {
  63. return sf.createdAt_
  64. }
  65. // UpdateAt -- дата последнего обновления.
  66. //
  67. //go:fix inline
  68. func (sf *RecMeta) UpdateAt() kspec.ITimeMut {
  69. return sf.updateAt_
  70. }