fcb_core 0.7.6

FlatCityBuf is a library for reading and writing CityJSON with FlatBuffers. Contains code derived from FlatGeobuf (BSD-2-Clause) for spatial indexing.
Documentation
use anyhow::Result;
use fcb_core::deserializer::to_cj_metadata;
use fcb_core::FcbReader;
use std::fs::File;
use std::io::{BufReader, BufWriter, Write};
use std::path::PathBuf;

fn read_file() -> Result<()> {
    let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    let input_file_path = manifest_dir.join("temp").join("test_output.fcb");
    let input_file = File::open(input_file_path)?;
    let inputreader = BufReader::new(input_file);

    let output_file = manifest_dir
        .join("temp")
        .join("test_output_header.city.jsonl");
    let output_file = File::create(output_file)?;
    let mut outputwriter = BufWriter::new(output_file);

    let mut reader = FcbReader::open(inputreader)?.select_all()?;
    let header = reader.header();
    let cj = to_cj_metadata(&header)?;
    let mut features = Vec::new();
    let feat_count = header.features_count();
    let mut feat_num = 0;
    while let Some(feat_buf) = reader.next()? {
        let feature = feat_buf.cur_cj_feature()?;
        features.push(feature);
        feat_num += 1;
        if feat_num >= feat_count {
            break;
        }
    }

    outputwriter.write_all(format!("{}\n", serde_json::to_string(&cj).unwrap()).as_bytes())?;

    for feature in &features {
        outputwriter
            .write_all(format!("{}\n", serde_json::to_string(feature).unwrap()).as_bytes())?;
    }

    Ok(())
}

fn main() {
    read_file().unwrap();
}