xplane-web-api 0.1.0

Bindings to the X-Plane Web APIs (REST and websocket)
Documentation
use std::env;
use std::fs::File;
use std::path::Path;

fn main() {
    let spec_path = "openapi/xplane-web-api-v3.yaml";
    println!("cargo:rerun-if-changed={spec_path}");

    let file = File::open(spec_path)
        .unwrap_or_else(|error| panic!("Failed to open OpenAPI file `{spec_path}`: {error}"));
    let spec: openapiv3::OpenAPI = yaml_serde::from_reader(file)
        .unwrap_or_else(|error| panic!("Failed to parse OpenAPI YAML `{spec_path}`: {error}"));

    let mut rest_generator = progenitor::Generator::default();
    let rest_tokens = rest_generator
        .generate_tokens(&spec)
        .unwrap_or_else(|error| panic!("Failed to generate client tokens from OpenAPI: {error}"));

    let rest_ast = syn::parse2(rest_tokens)
        .unwrap_or_else(|error| panic!("Failed to parse generated client tokens: {error}"));
    let rest_generated = prettyplease::unparse(&rest_ast);

    let out_dir =
        env::var("OUT_DIR").unwrap_or_else(|error| panic!("Missing OUT_DIR env var: {error}"));
    let rest_output_path = Path::new(&out_dir).join("xplane_web_api.rs");
    std::fs::write(&rest_output_path, rest_generated).unwrap_or_else(|error| {
        panic!(
            "Failed to write generated client source to `{}`: {error}",
            rest_output_path.display()
        )
    });
}