// package rec_meta -- мета-информация записи KV-хранилища. package rec_meta import ( "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key" ) var ( hassert = helpers.Hassert ) // IRecMeta -- интерфейс мета-информации записи KV-хранилища. type IRecMeta interface { // Vers -- версия записи Vers() int64 // Operation -- тип операции над записью Operation() defs.ITxtFix // CreatedAt -- дата создания записи CreatedAt() core_spec.ITime // UpdateAt -- дата последнего обновления UpdateAt() core_spec.ITimeMut } // RecMeta -- мета-информация записи KV-хранилища. // // Вся информация о записи хранится в JSON-строке, без форматирования // для того, что можно было файл индексов бакета писать построчно. // Даже если ключ содержит пробелы или экранированное форматирование // JSON их экранирует внутри. type RecMeta struct { Key_ rec_key.ARecKey `json:"key"` // Ключ Vers_ int64 `json:"vers"` // Версия записи Operation_ defs.ITxtFix `json:"operation"` // Тип операции над записью createdAt_ core_spec.ITime `voc:"created_at"` // Дата создания записи updateAt_ core_spec.ITimeMut `voc:"update_at"` // Дата последнего обновления // Хеш мета-информации записи (вместе с значением, но без этого поля разумеется) Sha_ defs.ITxtFix `json:"sha"` Offset_ int64 `json:"-"` // Смещение в файле, игнорируется при записи } // NewRecMeta -- создание новой мета-информации записи KV-хранилища. func NewRecMeta(key rec_key.IRecKeyFix) *RecMeta { hassert(key != nil, "NewRecMeta: key==nil") sf := &RecMeta{ Key_: key.Get(), Vers_: 1, Operation_: defs.TxtFix("create"), createdAt_: etime.NewETimeAuto(), updateAt_: etime.NewETimeAutoMut(), } _ = IRecMeta(sf) return sf } // Key -- ключ записи. // func (sf *RecMeta) Key() rec_key.IRecKeyFix { return rec_key.NewRecKey(sf.Key_) } // Vers -- версия записи. // func (sf *RecMeta) Vers() int64 { return sf.Vers_ } // Operation -- тип операции над записью. // func (sf *RecMeta) Operation() defs.ITxtFix { return sf.Operation_ } // CreatedAt -- дата создания записи. // func (sf *RecMeta) CreatedAt() core_spec.ITime { return sf.createdAt_ } // UpdateAt -- дата последнего обновления. // func (sf *RecMeta) UpdateAt() core_spec.ITimeMut { return sf.updateAt_ }