#avro #serde #code-generation #cli

构建 avrogen

此程序允许从 avro 定义文件生成 Rust 代码。模块从命名空间信息创建。

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 2024 年 8 月 21 日

#177 in 构建工具

Download history

79 每月下载次数

自定义许可证LGPL-3.0

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