rec_meta.go 2.4 KB

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