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