Add name, created_at and updated_at informations into main index

This commit is contained in:
Quentin de Quelen 2019-11-19 16:04:16 +01:00
parent 750d336018
commit 076e781810

View File

@ -1,17 +1,22 @@
use chrono::{DateTime, Utc};
use crate::RankedMap; use crate::RankedMap;
use heed::types::{ByteSlice, OwnedType, SerdeBincode, Str};
use heed::Result as ZResult; use heed::Result as ZResult;
use heed::types::{ByteSlice, OwnedType, SerdeBincode, Str};
use meilidb_schema::Schema; use meilidb_schema::Schema;
use std::sync::Arc; use std::sync::Arc;
const CREATED_AT: &str = "created-at";
const CUSTOMS_KEY: &str = "customs-key"; const CUSTOMS_KEY: &str = "customs-key";
const NAME: &str = "name";
const NUMBER_OF_DOCUMENTS_KEY: &str = "number-of-documents"; const NUMBER_OF_DOCUMENTS_KEY: &str = "number-of-documents";
const RANKED_MAP_KEY: &str = "ranked-map"; const RANKED_MAP_KEY: &str = "ranked-map";
const SCHEMA_KEY: &str = "schema"; const SCHEMA_KEY: &str = "schema";
const SYNONYMS_KEY: &str = "synonyms";
const STOP_WORDS_KEY: &str = "stop-words"; const STOP_WORDS_KEY: &str = "stop-words";
const SYNONYMS_KEY: &str = "synonyms";
const WORDS_KEY: &str = "words"; const WORDS_KEY: &str = "words";
type SerdeDatetime = SerdeBincode<DateTime<Utc>>;
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
pub struct Main { pub struct Main {
pub(crate) main: heed::PolyDatabase, pub(crate) main: heed::PolyDatabase,
@ -22,6 +27,22 @@ impl Main {
self.main.clear(writer) self.main.clear(writer)
} }
pub fn name(self, reader: &heed::RoTxn) -> ZResult<Option<String>> {
Ok(self.main.get::<Str, Str>(reader, NAME)?.map(|name| name.to_owned()))
}
pub fn put_name(self, writer: &mut heed::RwTxn, name: &str) -> ZResult<()> {
self.main.put::<Str, Str>(writer, NAME, name)
}
pub fn created_at(self, reader: &heed::RoTxn) -> ZResult<Option<DateTime<Utc>>> {
self.main.get::<Str, SerdeDatetime>(reader, CREATED_AT)
}
pub fn put_created_at(self, writer: &mut heed::RwTxn) -> ZResult<()> {
self.main.put::<Str, SerdeDatetime>(writer, CREATED_AT, &Utc::now())
}
pub fn put_words_fst(self, writer: &mut heed::RwTxn, fst: &fst::Set) -> ZResult<()> { pub fn put_words_fst(self, writer: &mut heed::RwTxn, fst: &fst::Set) -> ZResult<()> {
let bytes = fst.as_fst().as_bytes(); let bytes = fst.as_fst().as_bytes();
self.main.put::<Str, ByteSlice>(writer, WORDS_KEY, bytes) self.main.put::<Str, ByteSlice>(writer, WORDS_KEY, bytes)