infinitree 0.11.0

Embedded, encrypted database with tiered cache
Documentation
use super::Key;
use crate::chunks::RawChunkPointer;
use std::ops::{Deref, DerefMut};

pub const HEADER_SIZE: usize = 512;

macro_rules! header_size_struct {
    ($name:tt) => {
        #[derive(PartialEq, Eq, Debug, Clone)]
        pub struct $name(pub(super) [u8; HEADER_SIZE]);

        impl From<[u8; HEADER_SIZE]> for $name {
            fn from(buf: [u8; HEADER_SIZE]) -> Self {
                Self(buf)
            }
        }

        impl DerefMut for $name {
            fn deref_mut(&mut self) -> &mut Self::Target {
                &mut self.0
            }
        }

        impl Deref for $name {
            type Target = [u8];

            fn deref(&self) -> &Self::Target {
                &self.0
            }
        }

        impl Default for $name {
            fn default() -> Self {
                Self([0; std::mem::size_of::<Self>()])
            }
        }

        impl AsRef<[u8]> for $name {
            fn as_ref(&self) -> &[u8] {
                &self.0
            }
        }

        impl AsMut<[u8]> for $name {
            fn as_mut(&mut self) -> &mut [u8] {
                &mut self.0
            }
        }
    };
}

#[derive(Clone)]
pub struct Header {
    pub(crate) root_ptr: RawChunkPointer,
    pub(crate) key: Key,
}

header_size_struct!(SealedHeader);
header_size_struct!(OpenHeader);