sombra 0.3.6

High-performance graph database with ACID transactions, single-file storage, and bindings for Rust, TypeScript, and Python
Documentation
use crate::db::group_commit::TxId;
use crate::error::Result;
use crate::model::{EdgeId, NodeId};
use crate::pager::PageId;
use crate::storage::header::Header;

#[derive(Debug, Clone)]
pub struct HeaderState {
    pub next_node_id: NodeId,
    pub next_edge_id: EdgeId,
    pub free_page_head: Option<PageId>,
    pub last_record_page: Option<PageId>,
    pub last_committed_tx_id: TxId,
    pub btree_index_page: Option<PageId>,
    pub btree_index_size: u32,
    pub property_index_root_page: Option<PageId>,
    pub property_index_count: u32,
    pub property_index_version: u16,
}

impl From<Header> for HeaderState {
    fn from(header: Header) -> Self {
        Self {
            next_node_id: header.next_node_id,
            next_edge_id: header.next_edge_id,
            free_page_head: header.free_page_head,
            last_record_page: header.last_record_page,
            last_committed_tx_id: header.last_committed_tx_id,
            btree_index_page: header.btree_index_page,
            btree_index_size: header.btree_index_size,
            property_index_root_page: header.property_index_root_page,
            property_index_count: header.property_index_count,
            property_index_version: header.property_index_version,
        }
    }
}

impl HeaderState {
    pub fn to_header(&self, page_size: usize) -> Result<Header> {
        let mut header = Header::new(page_size)?;
        header.next_node_id = self.next_node_id;
        header.next_edge_id = self.next_edge_id;
        header.free_page_head = self.free_page_head;
        header.last_record_page = self.last_record_page;
        header.last_committed_tx_id = self.last_committed_tx_id;
        header.btree_index_page = self.btree_index_page;
        header.btree_index_size = self.btree_index_size;
        header.property_index_root_page = self.property_index_root_page;
        header.property_index_count = self.property_index_count;
        header.property_index_version = self.property_index_version;
        Ok(header)
    }
}