car-server-core 0.55.0

Transport-neutral library for the CAR daemon JSON-RPC dispatcher (used by car-server and tokhn-daemon)
Documentation
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(())
}