use edgefirst_decoder::schema::SchemaV2;
use edgefirst_decoder::DecoderBuilder;
use std::env;
use std::fs;
use std::io::{Cursor, Read};
fn extract_edgefirst_json_from_tflite(data: &[u8]) -> Option<String> {
let reader = Cursor::new(data);
let mut archive = zip::ZipArchive::new(reader).ok()?;
let mut file = archive.by_name("edgefirst.json").ok()?;
let mut json = String::new();
file.read_to_string(&mut json).ok()?;
Some(json)
}
fn main() {
let path = env::args().nth(1).expect("usage: parse_edgefirst <path>");
let json_str = if path.ends_with(".tflite") {
let data = fs::read(&path).expect("read");
extract_edgefirst_json_from_tflite(&data)
.unwrap_or_else(|| panic!("{path}: no embedded edgefirst.json in tflite"))
} else {
fs::read_to_string(&path).expect("read")
};
let schema = match SchemaV2::parse_json(&json_str) {
Ok(s) => s,
Err(e) => {
println!("PARSE-ERR {}\n {}", path, e);
std::process::exit(1);
}
};
println!(
"PARSE-OK {} (decoder={:?}, outputs={})",
path,
schema.decoder_version,
schema.outputs.len()
);
match DecoderBuilder::new().with_schema(schema).build() {
Ok(_) => println!("BUILD-OK {}", path),
Err(e) => {
println!("BUILD-ERR {}\n {}", path, e);
std::process::exit(2);
}
}
}