12 个版本 (6 个重大变更)

0.7.0 2021年9月16日
0.6.0 2021年3月14日
0.5.0 2020年12月25日
0.4.1 2020年9月8日
0.1.1 2017年4月21日

#1123 in 编码

Download history 83/week @ 2024-04-12 44/week @ 2024-04-19 41/week @ 2024-04-26 35/week @ 2024-05-03 24/week @ 2024-05-10 29/week @ 2024-05-17 21/week @ 2024-05-24 18/week @ 2024-05-31 32/week @ 2024-06-07 28/week @ 2024-06-14 25/week @ 2024-06-21 39/week @ 2024-06-28 32/week @ 2024-07-05 5/week @ 2024-07-12 5/week @ 2024-07-19 13/week @ 2024-07-26

每月下载量 78

MIT/Apache

105KB
2.5K SLoC

json_typegen - 从 JSON 样本生成 Rust 类型

Travis Build Status Appveyor build status crates.io docs.rs

json_typegen 是一个工具集合,用于从 JSON 样本为 Rust、Kotlin 和 TypeScript 生成类型。也就是说,您给它一些 JSON,它会为您生成在程序中使用该 JSON 所必需的类型定义。

此代码生成逻辑有三个接口

过程宏

在 Rust 中,可以使用过程宏直接在您正在制作的程序中使用代码生成。

对于熟悉 F# 的人来说,过程宏 json_typegen! 在 Rust 中作为 JSON 的 类型提供程序 使用。它受到了 F# Data 的启发,并使用了相同的推理算法。

以下示例代码基于内联样本生成类型 Point

use json_typegen::json_typegen;

json_typegen!("Point", r#"{ "x": 1, "y": 2 }"#);

fn main() {
    let mut p: Point = serde_json::from_str(r#"{ "x": 3, "y": 5 }"#).unwrap();
    println!("deserialized = {:?}", p);
    p.x = 4;
    let serialized = serde_json::to_string(&p).unwrap();
    println!("serialized = {}", serialized);
}

以下 crate 依赖关系对于此示例正常工作是必需的

[dependencies]
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
json_typegen = "0.7"

样本 json 也可以来自本地或远程文件

json_typegen!("Point", "json_samples/point.json");
json_typegen!("Point", "http://example.com/someapi/point.json");

代码生成也可以进行自定义

json_typegen!("Point", "http://example.com/someapi/point.json", {
    use_default_for_missing_fields,
    "/foo/bar": {
        use_type: "map"
    }
});

有关配置的详细信息,请参阅 相关文档

条件编译

为了避免在每次构建时为每个样本执行 HTTP 请求,可以使用条件编译仅在使用时检查远程样本

#[cfg(not(feature = "online-samples"))]
json_typegen!("pub Point", r#"{ "x": 1, "y": 2 }"#);
#[cfg(feature = "online-samples")]
json_typegen!("pub Point", "https://typegen.vestera.as/examples/point.json");

并在 Cargo.toml 中

[features]
online-samples = []

然后您可以通过以下方式验证远程样本是否符合您的期望,例如在 CI 构建中

cargo check --features "online-samples"

命令行界面

json_typegen_cli crate 提供了一个命令行界面,用于使用与过程宏内部使用的相同代码生成。如果您需要在某些时候自定义生成的代码,而宏参数不切实际,这将提供有用的迁移路径。

有关安装和使用详情,请参阅 其自述文件

Web 界面

对于简单的测试和一次性使用,还有一个由 WebAssembly 提供支持的 Web 界面,托管在 https://typegen.vestera.as/ 上。源代码在 json_typegen_web 中。

创建自己的类型提供程序 crate

过程宏和形状推理算法实际上都非常简单。要学习/复制算法,您可以查看这个精简版(少于200行)

许可证

本项目采用双重许可,您可以选择Apache 2.0或MIT许可证。

依赖项

~6–9MB
~175K SLoC