Introduce the roaring bitmap heed codec

This commit is contained in:
Kerollmops
2020-06-22 17:56:07 +02:00
parent 8148210860
commit 2f0e1afd16
3 changed files with 34 additions and 9 deletions

3
src/heed_codec/mod.rs Normal file
View File

@ -0,0 +1,3 @@
mod roaring_bitmap;
pub use self::roaring_bitmap::RoaringBitmapCodec;

View File

@ -0,0 +1,22 @@
use std::borrow::Cow;
use roaring::RoaringBitmap;
pub struct RoaringBitmapCodec;
impl heed::BytesDecode<'_> for RoaringBitmapCodec {
type DItem = RoaringBitmap;
fn bytes_decode(bytes: &[u8]) -> Option<Self::DItem> {
RoaringBitmap::deserialize_from(bytes).ok()
}
}
impl heed::BytesEncode<'_> for RoaringBitmapCodec {
type EItem = RoaringBitmap;
fn bytes_encode(item: &Self::EItem) -> Option<Cow<[u8]>> {
let mut bytes = Vec::new();
item.serialize_into(&mut bytes).ok()?;
Some(Cow::Owned(bytes))
}
}