brdb 0.7.0

A library for reading and writing Brickadia's World files.
Documentation
use brdb::{BrFsReader, Brdb, Brz, IntoReader};
use std::{ops::Deref, path::PathBuf};

fn dump<R>(db: &R) -> Result<(), Box<dyn std::error::Error>>
where
    R: Deref,
    R::Target: BrFsReader + Sized,
{
    let inner: &R::Target = db;
    println!("=== FS ===\n{}", inner.get_fs()?.render());
    inner.get_fs()?.for_each(&mut |f| {
        if f.is_file() && f.name().ends_with(".json") {
            if let Ok(buf) = f.read(inner) {
                println!("\n=== {} ===\n{}", f.name(), String::from_utf8_lossy(&buf));
            }
        }
    });
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let p = PathBuf::from(std::env::args().nth(1).unwrap());
    if p.extension().and_then(|e| e.to_str()) == Some("brdb") {
        dump(&Brdb::open(&p)?.into_reader())
    } else {
        dump(&Brz::open(&p)?.into_reader())
    }
}