deepstore-agent-client 1.0.2

Rust client SDK for deepstore-agent (data plane)
use std::path::PathBuf;

fn main() {
    // Read the OpenAPI spec from the deepstore-agent crate
    let spec_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("..")
        .join("deepstore-agent")
        .join("openapi.json");

    println!("cargo:rerun-if-changed={}", spec_path.display());

    let spec_json = std::fs::read_to_string(&spec_path).unwrap_or_else(|e| {
        panic!(
            "Failed to read OpenAPI spec at {}: {}",
            spec_path.display(),
            e
        )
    });

    let spec: serde_json::Value = serde_json::from_str(&spec_json)
        .unwrap_or_else(|e| panic!("Failed to parse OpenAPI spec as JSON: {}", e));

    // Parse as OpenAPI spec
    let spec: openapiv3::OpenAPI = serde_json::from_value(spec)
        .unwrap_or_else(|e| panic!("Failed to parse OpenAPI spec: {}", e));

    // Generate the client using progenitor
    let mut generator = progenitor::Generator::default();
    let tokens = generator
        .generate_tokens(&spec)
        .unwrap_or_else(|e| panic!("Failed to generate client code: {}", e));

    let ast = syn::parse2(tokens).unwrap();
    let content = prettyplease::unparse(&ast);

    // Write to OUT_DIR
    let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());
    let out_file = out_dir.join("codegen.rs");
    std::fs::write(&out_file, content)
        .unwrap_or_else(|e| panic!("Failed to write generated code: {}", e));
}