#open-api #definition #generate #structures

openapi-struct-gen

从OpenAPI 3.0定义中生成Rust结构

14个版本

0.1.13 2023年5月5日
0.1.12 2023年5月5日
0.1.11 2023年2月14日
0.1.6 2022年8月18日

数据库接口中排名492

Apache-2.0

21KB
508

此crate从OpenAPI 3.0定义生成Rust结构。

示例

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();
}

第一个参数是oapi架构的路径。第二个是目标输出Rust文件。第三个是派生语句。第四个是使用语句,是对象路径和对象的元组的元组。第五个是在派生语句之前放置的注解。有时这些是必需的,例如serde_with。每个注解由一个元组组成 - 注解本身和可选的不需要此注解的结构体列表。第六个是在派生语句之后放置的注解。大多数注解都会这样应用。每个注解由一个元组组成 - 注解本身和可选的不需要此注解的结构体列表

代码

openapi_struct_gen::include!("oapi");

目标

  • 从Open API 3.0定义生成Rust结构

非目标

  • 生成Web服务器和客户端

依赖项

~0–690KB
~14K SLoC