// package rec_meta -- мета-информация записи KV-хранилища package rec_meta import ( "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes" "gitp78su.ipnodns.ru/svi/kern/v4/lev1/helpers" ) 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_ }