ese-core 0.1.0

ESE (Extensible Storage Engine) database binary format reader
Documentation
use ese_core::EseDatabase;
use std::path::Path;

fn main() {
    let path = Path::new("tests/data/srudb/chainsaw_SRUDB.dat");
    let db = EseDatabase::open(path).expect("open");
    
    for name in &[
        "SruDbIdMapTable",
        "{973F5D5C-1D90-4944-BE8E-24B94231A174}",
        "{5C8CF1C7-7257-4F13-B223-970EF5939312}",
        "{D10CA2FE-6FCF-4F6D-848E-B2E99266FA89}",
    ] {
        match db.find_table_page(name) {
            Ok(root) => {
                let leaves = db.walk_leaf_pages(root).unwrap_or_default();
                let mut total_tags = 0usize;
                for &p in &leaves {
                    if let Ok(page) = db.read_page(p) {
                        if let Ok(tags) = page.tags() {
                            total_tags += tags.len().saturating_sub(1);
                        }
                    }
                }
                println!("{name}: root={root} leaves={} total_tags={total_tags} pages={:?}", 
                    leaves.len(), &leaves[..leaves.len().min(8)]);
            }
            Err(e) => println!("{name}: ERR {e}"),
        }
    }
}