pagedb 0.1.0-beta.1

Encrypted, portable, embedded page store with B+ tree and segment-file surfaces.
Documentation
use crate::RealmId;

pub const MAGIC: [u8; 8] = *b"PAGESEAL";
pub const FOOTER_FIELDS_END_V1: usize = 99;
pub const FOOTER_FIELDS_END_V2: usize = FOOTER_FIELDS_END_V1 + 12;
pub const FOOTER_FIELDS_END: usize = FOOTER_FIELDS_END_V1;
pub const FOOTER_HEADER_MAC_LEN: usize = 16;
pub const FOOTER_CLEARTEXT_END_V1: usize = FOOTER_FIELDS_END_V1 + FOOTER_HEADER_MAC_LEN;
pub const FOOTER_CLEARTEXT_END_V2: usize = FOOTER_FIELDS_END_V2 + FOOTER_HEADER_MAC_LEN;
pub const FOOTER_CLEARTEXT_END: usize = FOOTER_CLEARTEXT_END_V1;
pub const MANIFEST_TAG_LEN: usize = 16;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SegmentFooterFields {
    pub format_version: u16,
    pub cipher_id: u8,
    pub segment_id: [u8; 16],
    pub parent_file_id: [u8; 16],
    pub realm_id: RealmId,
    pub mk_epoch: u64,
    pub page_count: u64,
    pub total_bytes: u64,
    pub final_counter: u64,
    pub index_start_page: u64,
    pub index_page_count: u32,
}

#[must_use]
pub const fn max_manifest_len(page_size: usize) -> usize {
    page_size - FOOTER_CLEARTEXT_END_V1 - MANIFEST_TAG_LEN
}

#[must_use]
pub const fn max_manifest_len_v2(page_size: usize) -> usize {
    page_size - FOOTER_CLEARTEXT_END_V2 - MANIFEST_TAG_LEN
}