data_bucket 0.3.13

DataBucket is container for WorkTable's data
Documentation
use rkyv::{Archive, Deserialize, Serialize};

use crate::page;

pub const LINK_LENGTH: usize = 12;

#[derive(
    Archive,
    Copy,
    Clone,
    Deserialize,
    Debug,
    Default,
    Eq,
    Hash,
    Ord,
    PartialEq,
    PartialOrd,
    Serialize,
)]
#[rkyv(derive(Debug, PartialOrd, PartialEq, Eq, Ord))]
pub struct Link {
    pub page_id: page::PageId,
    pub offset: u32,
    pub length: u32,
}

impl<T> PartialEq<T> for Link
where
    T: AsRef<Link>,
{
    fn eq(&self, other: &T) -> bool {
        other.as_ref().eq(self)
    }
}

#[cfg(test)]
mod tests {
    use crate::link::Link;
    use crate::link::LINK_LENGTH;

    #[test]
    fn link_length_valid() {
        let link = Link {
            page_id: 1.into(),
            offset: 10,
            length: 20,
        };
        let bytes = rkyv::to_bytes::<rkyv::rancor::Error>(&link).unwrap();

        assert_eq!(bytes.len(), LINK_LENGTH)
    }
}