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