use std::path::PathBuf;
fn main() {
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));
let spec: openapiv3::OpenAPI = serde_json::from_value(spec)
.unwrap_or_else(|e| panic!("Failed to parse OpenAPI spec: {}", e));
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);
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));
}