#schema-definition #schema #codegen #idl #json-schema

bin+lib fluorite_codegen

从由 Yaml/JSON 指定的模式生成 rust/typescript 代码

8 个版本

0.1.9 2024 年 4 月 14 日
0.1.8 2024 年 4 月 14 日
0.1.7 2023 年 12 月 27 日

#885 in 开发工具

Download history 117/week @ 2024-04-08 92/week @ 2024-04-15 5/week @ 2024-05-13 1/week @ 2024-05-20

374 每月下载量

MIT/Apache

51KB
1K SLoC

Fluorite

Crates.io docs.rs

从 Yaml/JSON 指定的模式生成 rust/typescript 代码。

Fluorite 的 模式定义代码 由以下命令生成:fluorite rust -i src/fluorite/definition.yaml -o ./src/definitions/

在 Cargo 项目中使用 fluorite

请查看 示例项目 以获取详细信息。首先添加以下依赖项:

[dependencies]
serde = "<serde-version>"
fluorite = "0.1"
derive-new = "0.6"

[build-dependencies]
fluorite_codegen = "0.1"

build.rs 中使用 fluorite 在 Cargo 构建过程中生成代码

fn main() {
    let out_dir = std::env::var("OUT_DIR").unwrap();
    fluorite::compile(&["fluorite/demo.yaml"], out_dir.as_str()).unwrap();
}

指示您的项目包含生成的代码,例如在库或主文件中

mod demo {
    include!(concat!(env!("OUT_DIR"), "/demo/mod.rs"));
}

作为 CLI 使用 fluorite

$ fluorite --help
Generate rust/typescript codes from schemas specified by Yaml/JSON.

Usage: fluorite [OPTIONS] --output <OUTPUT>

Options:
  -i, --inputs <INPUTS>  Input definition files
  -o, --output <OUTPUT>  Output directory
  -t, --target <TARGET>  Target language [default: rust] [possible values: rust]
  -h, --help             Print help
  -V, --version          Print version

功能

  • 支持 Yaml 模式定义,请参阅 此处示例
  • 代码生成二进制程序
  • 语言支持
    • 在 Cargo build.rs 脚本中使用 Rust 代码生成
    • TypeScript 代码生成
    • CodeGen API 以向 fluorite 添加更多语言支持
  • 支持 JSON 模式定义(无计划)

模式定义功能

更多详细信息请参阅 definitions.rs

  • 用户定义类型
    • 对象
    • 枚举
    • ObjectEnum:支持序列化和反序列化时的多态类型
  • 集合类型
    • 列表
    • 映射
  • 原始类型
    • 字符串
    • 布尔值
    • (WIP) 日期时间
    • UIntX
    • IntX
    • Float
  • 支持可选字段
  • 支持任何类型字段

依赖关系

~2.9–4MB
~76K SLoC