mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-07-04 20:37:15 +02:00
Add the new tasks with most of the job done
This commit is contained in:
parent
b15de68831
commit
d3654906bf
38 changed files with 572 additions and 204 deletions
|
@ -10,6 +10,7 @@ mod roaring_bitmap_length;
|
|||
mod str_beu32_codec;
|
||||
mod str_ref;
|
||||
mod str_str_u8_codec;
|
||||
pub mod version;
|
||||
|
||||
pub use byte_slice_ref::BytesRefCodec;
|
||||
use heed::BoxedError;
|
||||
|
|
44
crates/milli/src/heed_codec/version.rs
Normal file
44
crates/milli/src/heed_codec/version.rs
Normal file
|
@ -0,0 +1,44 @@
|
|||
use std::mem::size_of;
|
||||
use std::{borrow::Cow, mem::size_of_val};
|
||||
|
||||
use byteorder::{BigEndian, ByteOrder};
|
||||
use heed::{BoxedError, BytesDecode, BytesEncode};
|
||||
|
||||
const VERSION_SIZE: usize = std::mem::size_of::<u32>() * 3;
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
#[error(
|
||||
"Could not decode the version: Expected {} bytes but instead received {0} bytes",
|
||||
VERSION_SIZE
|
||||
)]
|
||||
pub struct DecodeVersionError(usize);
|
||||
|
||||
pub struct VersionCodec;
|
||||
impl<'a> BytesEncode<'a> for VersionCodec {
|
||||
type EItem = (u32, u32, u32);
|
||||
|
||||
fn bytes_encode(item: &'a Self::EItem) -> Result<Cow<'a, [u8]>, BoxedError> {
|
||||
let mut ret = Vec::with_capacity(size_of::<u32>() * 3);
|
||||
ret.extend(&item.0.to_be_bytes());
|
||||
ret.extend(&item.1.to_be_bytes());
|
||||
ret.extend(&item.2.to_be_bytes());
|
||||
Ok(Cow::Owned(ret))
|
||||
}
|
||||
}
|
||||
impl<'a> BytesDecode<'a> for VersionCodec {
|
||||
type DItem = (u32, u32, u32);
|
||||
|
||||
fn bytes_decode(bytes: &'a [u8]) -> Result<Self::DItem, BoxedError> {
|
||||
if bytes.len() != VERSION_SIZE {
|
||||
Err(Box::new(DecodeVersionError(bytes.len())))
|
||||
} else {
|
||||
let major = BigEndian::read_u32(bytes);
|
||||
let bytes = &bytes[size_of_val(&major)..];
|
||||
let minor = BigEndian::read_u32(bytes);
|
||||
let bytes = &bytes[size_of_val(&major)..];
|
||||
let patch = BigEndian::read_u32(bytes);
|
||||
|
||||
Ok((major, minor, patch))
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue