This crate generates Rust structures from OpenAPI 3.0 definitions.
[dependencies]
serde = "1.0.142"
openapi-struct-gen = "*"
[build-dependencies]
openapi-struct-gen = { version = "*", features = ["build"] }
use openapi_struct_gen::generate;
fn main() {
generate(
format!(
"{}/{}",
std::env::var("CARGO_MANIFEST_DIR").unwrap(),
"api.yaml"
),
format!("{}/{}", std::env::var("OUT_DIR").unwrap(), "oapi.rs"),
Some(&["Clone", "Serialize", "Deserialize"]),
Some(&[("serde", "Serialize"), ("serde", "Deserialize")]),
Some(&[(r#"#[skip_serializing_none]"#, None)]),
Some(&[(r#"#[serde(rename_all = "camelCase")]"#, Some(&["Struct"]))]),
).unwrap();
}
The first aparameter is path to oapi schema. The second is the target output rust file. The third is derive statements. The fourth is use statements, being tuples of the path to an object and the object the fifth is annotations that are to be put before the derive statement. Sometimes such are required, like serde_with. Each annotation consists of a tuple - the annotation itself and optional list of structs that are not to have this annotation The sixth is annotations that are to be put after the derive statement. Most annotations would be applied like that. Each annotation consists of a tuple - the annotation itself and optional list of structs that are not to have this annotation
openapi_struct_gen::include!("oapi");
- Generate Rust structures from Open API 3.0 definitions
- Generate web servers and clients