77 lines
2.5 KiB
Rust
77 lines
2.5 KiB
Rust
use std::{env, fs, path::Path};
|
|
|
|
use proc_macro2::TokenStream;
|
|
use torn_api_codegen::{
|
|
model::{parameter::Parameter, path::Path as ApiPath, resolve, scope::Scope},
|
|
openapi::schema::OpenApiSchema,
|
|
};
|
|
|
|
const DENY_LIST: &[&str] = &[];
|
|
|
|
fn main() {
|
|
let out_dir = env::var_os("OUT_DIR").unwrap();
|
|
let model_dest = Path::new(&out_dir).join("models.rs");
|
|
let params_dest = Path::new(&out_dir).join("parameters.rs");
|
|
let requests_dest = Path::new(&out_dir).join("requests.rs");
|
|
let scopes_dest = Path::new(&out_dir).join("scopes.rs");
|
|
|
|
let s = include_str!("./openapi.json");
|
|
let schema: OpenApiSchema = serde_json::from_str(s).unwrap();
|
|
|
|
let mut models_code = TokenStream::new();
|
|
|
|
for (name, model) in &schema.components.schemas {
|
|
if DENY_LIST.contains(name) {
|
|
continue;
|
|
}
|
|
let model = resolve(model, name, &schema.components.schemas);
|
|
if let Some(new_code) = model.codegen() {
|
|
models_code.extend(new_code);
|
|
}
|
|
}
|
|
|
|
let models_file = syn::parse2(models_code).unwrap();
|
|
let models_pretty = prettyplease::unparse(&models_file);
|
|
fs::write(&model_dest, models_pretty).unwrap();
|
|
|
|
let mut params_code = TokenStream::new();
|
|
|
|
for (name, param) in &schema.components.parameters {
|
|
if let Some(code) = Parameter::from_schema(name, param).unwrap().codegen() {
|
|
params_code.extend(code);
|
|
}
|
|
}
|
|
|
|
let params_file = syn::parse2(params_code).unwrap();
|
|
let params_pretty = prettyplease::unparse(¶ms_file);
|
|
fs::write(¶ms_dest, params_pretty).unwrap();
|
|
|
|
let mut requests_code = TokenStream::new();
|
|
let mut paths = Vec::new();
|
|
for (name, path) in &schema.paths {
|
|
let Some(path) = ApiPath::from_schema(name, path, &schema.components.parameters) else {
|
|
continue;
|
|
};
|
|
if let Some(code) = path.codegen_request() {
|
|
requests_code.extend(code);
|
|
}
|
|
paths.push(path);
|
|
}
|
|
|
|
let requests_file = syn::parse2(requests_code).unwrap();
|
|
let requests_pretty = prettyplease::unparse(&requests_file);
|
|
fs::write(&requests_dest, requests_pretty).unwrap();
|
|
|
|
let mut scope_code = TokenStream::new();
|
|
let scopes = Scope::from_paths(paths);
|
|
for scope in scopes {
|
|
if let Some(code) = scope.codegen() {
|
|
scope_code.extend(code);
|
|
}
|
|
}
|
|
|
|
let scopes_file = syn::parse2(scope_code).unwrap();
|
|
let scopes_pretty = prettyplease::unparse(&scopes_file);
|
|
fs::write(&scopes_dest, scopes_pretty).unwrap();
|
|
}
|