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