openapi-struct-gen

Crates.ioopenapi-struct-gen
lib.rsopenapi-struct-gen
version0.1.13
sourcesrc
created_at2022-08-03 13:04:38.386285
updated_at2023-05-05 10:41:11.341214
descriptionGenerate rust structures from an openapi 3.0 definition
homepage
repositoryhttps://gitlab.com/amentis/openapi-struct-gen
max_upload_size
id638036
size94,306
(amentis)

documentation

README

This crate generates Rust structures from OpenAPI 3.0 definitions.

Example

Cargo.toml:

[dependencies]
serde = "1.0.142"
openapi-struct-gen = "*"

[build-dependencies]
openapi-struct-gen = { version = "*", features = ["build"] }

build.rs:

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

code:

openapi_struct_gen::include!("oapi");

Goals

  • Generate Rust structures from Open API 3.0 definitions

Non Goals

  • Generate web servers and clients
Commit count: 19

cargo fmt