10个版本

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

#168 in 构建工具


用于 fluorite_codegen

MIT/Apache

9KB
175 代码行

萤石

Crates.io docs.rs

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

萤石的 模式定义代码由以下命令生成: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"));
}

fluorite作为cli使用

$ 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
    • 浮点数
  • 支持可选字段
  • 支持任何类型字段

依赖

~0.4–1MB
~22K SLoC