use crate::storage_engine::constants::*;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct EntryMetadata {
pub(in crate::storage_engine) key_hash: u64, pub(in crate::storage_engine) prev_offset: u64, pub(in crate::storage_engine) checksum: [u8; 4], }
impl EntryMetadata {
#[inline]
pub fn serialize(&self) -> [u8; METADATA_SIZE] {
let mut buf = [0u8; METADATA_SIZE];
buf[KEY_HASH_RANGE].copy_from_slice(&self.key_hash.to_le_bytes());
buf[PREV_OFFSET_RANGE].copy_from_slice(&self.prev_offset.to_le_bytes());
buf[CHECKSUM_RANGE].copy_from_slice(&self.checksum);
buf
}
#[inline]
pub fn deserialize(data: &[u8]) -> Self {
Self {
key_hash: u64::from_le_bytes(data[KEY_HASH_RANGE].try_into().unwrap()),
prev_offset: u64::from_le_bytes(data[PREV_OFFSET_RANGE].try_into().unwrap()),
checksum: {
let mut checksum = [0u8; CHECKSUM_LEN];
checksum.copy_from_slice(&data[CHECKSUM_RANGE]);
checksum
},
}
}
}