use std::borrow::Cow;
use crate::memory::{MSize, MemoryResult};
use crate::prelude::PageOffset;
pub const DEFAULT_ALIGNMENT: MSize = 32;
pub trait Encode: Clone {
const SIZE: DataSize;
const ALIGNMENT: PageOffset;
fn encode(&'_ self) -> Cow<'_, [u8]>;
fn decode(data: Cow<[u8]>) -> MemoryResult<Self>
where
Self: Sized;
fn size(&self) -> MSize;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataSize {
Fixed(MSize),
Dynamic,
}
impl DataSize {
pub fn get_fixed_size(&self) -> Option<MSize> {
match self {
DataSize::Fixed(size) => Some(*size),
DataSize::Dynamic => None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_should_get_data_size_fixed() {
let size = DataSize::Fixed(10);
assert_eq!(size.get_fixed_size(), Some(10));
let variable_size = DataSize::Dynamic;
assert_eq!(variable_size.get_fixed_size(), None);
}
}