4 个版本
新版本 0.1.4 | 2024 年 8 月 21 日 |
---|---|
0.1.3 | 2024 年 8 月 21 日 |
0.1.2 | 2024 年 8 月 21 日 |
0.1.1 | 2024 年 8 月 21 日 |
0.1.0 |
|
#177 in 构建工具
79 每月下载次数
44KB
891 代码行
构建脚本使用方法
如果你不熟悉构建脚本,可以阅读 关于构建脚本的 Rust 文档
你可以使用此包在你的 Rust 项目中生成文件。为此,您需要将包添加到 Cargo.toml
文件中的构建依赖项。
[build-dependencies]
avrogen = "0.1.3" # Update if needed
然后您需要添加一个包含以下内容的 build.rs
文件
use avrogen::Avrogen;
fn main(){
let builder= avrogen::Avrogen::new()
.add_source("Schemas/*.avsc")
.output_folder_from_str("src/");
builder.execute().expect("Impossible to generate rust files from avsc files");
println!("cargo::rerun-if-changed=Schemas/");
}
您还可以使用 OUT_DIR 环境变量在目标文件夹中生成类。
独立使用
avrogen --help
显示此帮助信息
This program allow allow to generate rust code from avro definition files.
The code generated can be in a modul hierarchy and in the future we will generate a single file module structure.
Usage: avrogen [OPTIONS]
Options:
-s, --source [<SOURCE>...]
Source to use by the generator, use stdin if source isn't specified.
The source use glob format, you can use multiple source arguments. For simple search: ./MyFolder/*.avsc. For recursive search: ./MyFolder/**/*.avsc
-n, --default-namespace <DEFAULT_NAMESPACE>
Allow to define a default namespace for generated code. All namespace generated will be in this default namespace
-o, --output-folder <OUTPUT_FOLDER>
[default: ./]
-v, --verbose...
More output per occurrence
-q, --quiet...
Less output per occurrence
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
功能
此工具从 asvc 文件生成 Rust 模块和类。
命名空间
工具生成的模块结构与 avsc 文件中的命名空间相同。这允许有多个具有相同名称的类型。
我们可以添加一个默认命名空间(模块结构)。这允许在 SubNamespace 中生成所有代码。
命名约定
即使你的 asvc 不遵循 Rust 命名约定,该工具也会生成具有良好命名约定的文件。
- 模块使用
snake_case
- 结构和枚举使用
UpperCamelCase
- 字段使用
snake_case
如果字段/结构/模块使用 Rust 保留关键字,则将添加前缀。
添加了一些属性,以便在 asvc 名称和 Rust 代码中清理后的名称之间进行映射。
日期
此工具生成使用 chrono
包的日期字段。请确保您已使用命令将其添加到项目中
cargo add chrono -F serde
全局唯一标识符 (GUID)
此工具生成使用 uuid
包的 GUID 字段。请确保您已使用命令将其添加到项目中
cargo add uuid
限制
- 无法很好地管理多个联合。
- 如果您不想有模块结构,请扁平化命名空间结构
- 没有 chrono 的日期
- 仅保存到一个文件中
- 保存到标准输出
依赖项
~6–17MB
~178K SLoC