/ crates / arroyo-openapi / build.rs
build.rs
 1  use arroyo_api::ApiDoc;
 2  use progenitor::{GenerationSettings, InterfaceStyle};
 3  use std::path::PathBuf;
 4  use std::{env, fs};
 5  use utoipa::OpenApi;
 6  
 7  fn main() {
 8      // Generate the OpenAPI spec
 9      let api_spec = "../../target/api-spec.json";
10  
11      let doc = ApiDoc::openapi().to_pretty_json().unwrap();
12      fs::write(&api_spec, &doc).unwrap();
13  
14      let spec = serde_json::from_str(&doc).unwrap();
15      let mut settings = GenerationSettings::new();
16      settings.with_interface(InterfaceStyle::Builder);
17      let mut generator = progenitor::Generator::new(&settings);
18  
19      let tokens = generator.generate_tokens(&spec).unwrap();
20      let ast = syn::parse2(tokens).unwrap();
21      let content = prettyplease::unparse(&ast);
22  
23      let generated = PathBuf::from(env::var("OUT_DIR").unwrap()).join("generated");
24      fs::create_dir_all(&generated).unwrap();
25      fs::write(generated.join("api-client.rs"), content).unwrap();
26  }