meilisearch/meilidb-core/src/ranked_map.rs

39 lines
1.1 KiB
Rust
Raw Normal View History

2019-10-03 17:49:13 +08:00
use std::io::{Read, Write};
use hashbrown::HashMap;
use meilidb_schema::SchemaAttr;
2019-10-16 23:05:24 +08:00
use serde::{Serialize, Deserialize};
2019-10-03 17:49:13 +08:00
use crate::{DocumentId, Number};
#[derive(Debug, Default, Clone, PartialEq, Eq)]
2019-10-16 23:05:24 +08:00
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
2019-10-03 17:49:13 +08:00
pub struct RankedMap(HashMap<(DocumentId, SchemaAttr), Number>);
impl RankedMap {
pub fn len(&self) -> usize {
self.0.len()
}
pub fn insert(&mut self, document: DocumentId, attribute: SchemaAttr, number: Number) {
self.0.insert((document, attribute), number);
}
pub fn remove(&mut self, document: DocumentId, attribute: SchemaAttr) {
self.0.remove(&(document, attribute));
}
pub fn get(&self, document: DocumentId, attribute: SchemaAttr) -> Option<Number> {
self.0.get(&(document, attribute)).cloned()
}
pub fn read_from_bin<R: Read>(reader: R) -> bincode::Result<RankedMap> {
bincode::deserialize_from(reader).map(RankedMap)
}
pub fn write_to_bin<W: Write>(&self, writer: W) -> bincode::Result<()> {
bincode::serialize_into(writer, &self.0)
}
}