1
0
Fork 0

split generation into method and struct files

This commit is contained in:
Cyborus 2024-02-09 23:28:23 -05:00
parent 07806529f9
commit 7938d81544
No known key found for this signature in database
6 changed files with 6046 additions and 6038 deletions

View file

@ -1,4 +1,4 @@
use std::ffi::{OsStr, OsString}; use std::{ffi::OsString, path::PathBuf};
mod methods; mod methods;
mod openapi; mod openapi;
@ -9,10 +9,12 @@ use openapi::*;
fn main() -> eyre::Result<()> { fn main() -> eyre::Result<()> {
let spec = get_spec()?; let spec = get_spec()?;
let mut s = String::new(); let files = [
s.push_str(&methods::create_methods(&spec)?); ("mod.rs".into(), "pub mod structs;\npub mod methods;".into()),
s.push_str(&structs::create_structs(&spec)?); ("methods.rs".into(), methods::create_methods(&spec)?),
save_generated(&s)?; ("structs.rs".into(), structs::create_structs(&spec)?),
];
save_generated(&files)?;
Ok(()) Ok(())
} }
@ -25,15 +27,21 @@ fn get_spec() -> eyre::Result<OpenApiV2> {
Ok(spec) Ok(spec)
} }
fn save_generated(contents: &str) -> eyre::Result<()> { fn save_generated(files: &[(String, String)]) -> eyre::Result<()> {
let path = std::env::var_os("FORGEJO_API_GENERATED_PATH") let root_path = PathBuf::from(
.unwrap_or_else(|| OsString::from("./src/generated.rs")); std::env::var_os("FORGEJO_API_GENERATED_PATH")
std::fs::write(path.as_os_str(), contents)?; .unwrap_or_else(|| OsString::from("./src/generated/")),
run_rustfmt_on(path.as_os_str()); );
for (path, file) in files {
let path = root_path.join(path);
std::fs::create_dir_all(path.parent().ok_or_else(|| eyre::eyre!("no parent dir"))?)?;
std::fs::write(&path, file)?;
run_rustfmt_on(&path);
}
Ok(()) Ok(())
} }
fn run_rustfmt_on(path: &OsStr) { fn run_rustfmt_on(path: &std::path::Path) {
let mut rustfmt = std::process::Command::new("rustfmt"); let mut rustfmt = std::process::Command::new("rustfmt");
rustfmt.arg(path); rustfmt.arg(path);

View file

@ -6,6 +6,8 @@ use std::fmt::Write;
pub fn create_methods(spec: &OpenApiV2) -> eyre::Result<String> { pub fn create_methods(spec: &OpenApiV2) -> eyre::Result<String> {
let mut s = String::new(); let mut s = String::new();
s.push_str("use crate::ForgejoError;\n"); s.push_str("use crate::ForgejoError;\n");
s.push_str("use super::structs::*;\n");
s.push_str("\n");
s.push_str("impl crate::Forgejo {\n"); s.push_str("impl crate::Forgejo {\n");
for (path, item) in &spec.paths { for (path, item) in &spec.paths {
s.push_str(&create_methods_for_path(&spec, path, item).wrap_err_with(|| path.clone())?); s.push_str(&create_methods_for_path(&spec, path, item).wrap_err_with(|| path.clone())?);

View file

@ -5,8 +5,6 @@ use std::fmt::Write;
pub fn create_structs(spec: &OpenApiV2) -> eyre::Result<String> { pub fn create_structs(spec: &OpenApiV2) -> eyre::Result<String> {
let mut s = String::new(); let mut s = String::new();
s.push_str("use structs::*;\n");
s.push_str("pub mod structs {\n");
s.push_str("use crate::StructureError;"); s.push_str("use crate::StructureError;");
if let Some(definitions) = &spec.definitions { if let Some(definitions) = &spec.definitions {
for (name, schema) in definitions { for (name, schema) in definitions {
@ -32,7 +30,6 @@ pub fn create_structs(spec: &OpenApiV2) -> eyre::Result<String> {
let strukt = create_response_structs(spec, item)?; let strukt = create_response_structs(spec, item)?;
s.push_str(&strukt); s.push_str(&strukt);
} }
s.push_str("\n}");
Ok(s) Ok(s)
} }

File diff suppressed because it is too large Load diff

2
src/generated/mod.rs Normal file
View file

@ -0,0 +1,2 @@
pub mod methods;
pub mod structs;

6021
src/generated/structs.rs Normal file

File diff suppressed because it is too large Load diff