use std::path::PathBuf;
fn usage() -> ! {
eprintln!(
"usage: car-wire-schema --output <wire-schema.json> --digest-output <wire-schema.sha256>"
);
std::process::exit(2);
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut args = std::env::args().skip(1);
let mut output: Option<PathBuf> = None;
let mut digest_output: Option<PathBuf> = None;
while let Some(arg) = args.next() {
match arg.as_str() {
"--output" => output = args.next().map(PathBuf::from),
"--digest-output" => digest_output = args.next().map(PathBuf::from),
_ => usage(),
}
}
let output = output.unwrap_or_else(|| usage());
let digest_output = digest_output.unwrap_or_else(|| usage());
if let Some(parent) = output.parent() {
std::fs::create_dir_all(parent)?;
}
if let Some(parent) = digest_output.parent() {
std::fs::create_dir_all(parent)?;
}
let schema = car_server_core::wire_schema::rendered_document();
let digest = car_server_core::wire_schema::rendered_digest_file(&schema);
std::fs::write(output, schema)?;
std::fs::write(digest_output, digest)?;
Ok(())
}