wasmcloud-system-interface 0.1.1

wasmcloud system interface (frodobuf/midl)
use anyhow::anyhow;
use frodobuf::render::{OutputLanguage, RenderConfig, Renderer};
use midl_parser::parse_string;

const INPUT_FILE: &str = "./system.midl";

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let out_dir = std::path::PathBuf::from(&std::env::var("OUT_DIR").unwrap());

    let t = std::time::SystemTime::now();
    println!("cargo:rerun-if-changed={}", INPUT_FILE);
    eprintln!("# codegen ran at t={:?}", t);

    let idl_text = std::fs::read_to_string(INPUT_FILE)
        .map_err(|e| anyhow!("reading input file '{}': {}", INPUT_FILE, e))?;
    let descriptor = parse_string(&idl_text).map_err(|e| anyhow!("problem with the idl: {}", e))?;
    let schema = descriptor.schema;

    let mut renderer = Renderer::init(&RenderConfig {
        language: OutputLanguage::Rust,
        ..Default::default()
    })?;
    renderer.set("schema", serde_json::to_value(&schema)?);
    renderer.codegen_for_schema(&schema, &out_dir)?;
    Ok(())
}