read_brz/
read_brz.rs

1use brdb::{BrFsReader, Brz, IntoReader};
2use std::path::PathBuf;
3
4/// Reads a brz and prints out some of its information
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let path = PathBuf::from("./world.brz");
7
8    // The API for reading a brz is identical to reading a Brdb
9    let db = Brz::open(path)?.into_reader();
10
11    let data = db.global_data()?;
12    println!("Basic Brick assets: {:?}", data.basic_brick_asset_names);
13    println!("Wire ports: {:?}", data.component_wire_port_names);
14    println!("Component types: {:?}", data.component_type_names);
15    println!("Component structs: {:?}", data.component_data_struct_names);
16    println!("Component schemas: {}", db.components_schema()?);
17
18    let chunks = db.brick_chunk_index(1)?;
19    println!("Brick chunks: {chunks:?}");
20    for chunk in chunks {
21        let soa = db.brick_chunk_soa(1, chunk.index)?;
22        println!("Brick soa: {soa:?}");
23        if chunk.num_components > 0 {
24            let (_soa, components) = db.component_chunk_soa(1, chunk.index)?;
25            for c in components {
26                println!("Component: {c}");
27            }
28        }
29        if chunk.num_wires > 0 {
30            let soa = db.wire_chunk_soa(1, chunk.index)?;
31            println!("Wires soa: {soa}");
32        }
33    }
34
35    println!("Files: {}", db.get_fs()?.render());
36
37    Ok(())
38}