reddb-io-server 1.12.0

RedDB server-side engine: storage, runtime, replication, MCP, AI, and the gRPC/HTTP/RedWire/PG-wire dispatchers. Re-exported by the umbrella `reddb` crate.
Documentation
use super::*;

impl UnifiedStore {
    pub(super) fn write_native_meta_page(
        &self,
        existing_page: Option<u32>,
        data: &[u8],
    ) -> Result<(u32, u64), StoreError> {
        let Some(pager) = &self.pager else {
            return Ok((0, 0));
        };

        let page_id = match existing_page.filter(|page| *page != 0) {
            Some(page) => page,
            None => pager
                .allocate_page(crate::storage::engine::PageType::NativeMeta)
                .map_err(|err| StoreError::Serialization(err.to_string()))?
                .page_id(),
        };

        let checksum = reddb_file::native_store_page_checksum(data);
        let mut page = crate::storage::engine::Page::new(
            crate::storage::engine::PageType::NativeMeta,
            page_id,
        );
        let bytes = page.as_bytes_mut();
        let content_start = crate::storage::engine::HEADER_SIZE;
        let copy_len = data.len().min(bytes.len() - content_start);
        bytes[content_start..content_start + copy_len].copy_from_slice(&data[..copy_len]);
        pager
            .write_page(page_id, page)
            .map_err(|err| StoreError::Serialization(err.to_string()))?;
        Ok((page_id, checksum))
    }

    pub(super) fn read_native_meta_page(
        &self,
        page_id: u32,
        label: &str,
    ) -> Result<Vec<u8>, StoreError> {
        let Some(pager) = &self.pager else {
            return Err(StoreError::Serialization(format!(
                "{label} requires paged mode"
            )));
        };
        if page_id == 0 {
            return Err(StoreError::Serialization(format!(
                "{label} page is not set"
            )));
        }

        let page = pager
            .read_page(page_id)
            .map_err(|err| StoreError::Serialization(err.to_string()))?;
        Ok(page.as_bytes()[crate::storage::engine::HEADER_SIZE..].to_vec())
    }
}