batpak 0.8.2

Event sourcing with causal graphs and caller-defined gates. Sync API, no async runtime.
Documentation
use super::format;
use serde::Serialize;
use std::path::Path;

pub(super) fn touch_segment(dir: &Path, segment_id: u64) {
    let name = format!("{segment_id:06}.fbat");
    std::fs::write(dir.join(name), vec![0u8; 8192]).expect("write dummy segment");
}

pub(super) fn write_legacy_checkpoint_body<T: Serialize>(dir: &Path, version: u16, body: &T) {
    let body = crate::encoding::to_bytes(body).expect("serialize legacy checkpoint");
    let crc = crc32fast::hash(&body);
    let mut bytes = Vec::new();
    bytes.extend_from_slice(format::CHECKPOINT_MAGIC);
    bytes.extend_from_slice(&version.to_le_bytes());
    bytes.extend_from_slice(&crc.to_le_bytes());
    bytes.extend_from_slice(&body);
    std::fs::write(dir.join(format::CHECKPOINT_FILENAME), bytes).expect("write legacy checkpoint");
}