12 个不稳定版本 (3 个破坏性更新)

0.5.0 2024 年 8 月 1 日
0.4.5 2024 年 4 月 19 日
0.3.0 2024 年 4 月 4 日
0.2.0 2024 年 4 月 3 日
0.1.4 2024 年 4 月 3 日

#767嵌入式开发

Download history 62/week @ 2024-04-20 1/week @ 2024-05-18 17/week @ 2024-06-29 112/week @ 2024-07-06 9/week @ 2024-07-13 109/week @ 2024-07-20 90/week @ 2024-07-27 397/week @ 2024-08-03

每月 605 次下载

Apache-2.0

61KB
1K SLoC

femtopb-build

femtopb 库的代码生成器/protobuf 编译器。在内部使用 protoxprost-build,但目前仅公开了它们完整 API 的一小部分。

使用方法

该库旨在用于您的 build.rs 脚本,在构建时生成 Rust 代码。首先,像这样将 femtopbfemtopb-build 添加到依赖项中

[dependencies]

[build-dependencies]

一个有效的 build.rs 文件的示例是

fn main() -> anyhow::Result<()> {
    femtopb_build::compile_protos(
        &["src/myapi/v1/myapi.proto", "src/myapi/v1/foo.proto"],
        &["src"],
    )
}

compile_protos 的第一个参数列出了要编译的 proto 模式文件,第二个参数列出了包含目录,其中将解析来自一个 proto 文件到另一个文件的导入。

然后,您可以包含您想要在应用程序中使用模式的部分。生成的文件名将基于 protobuf 的 package 声明(并且为了清晰起见,可能也应该匹配您的目录结构)。

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

use myapi::v1::Foo;
// ...

要查看生成的代码,最简单的方法可能是直接运行 cargo doc

检查生成的代码

如果您不希望在构建期间生成代码,另一种常见的方法是在构建时生成一次代码,并将生成的代码检查到源代码控制中。一种常见但有点笨拙的方法是在您的软件包中添加一个 example,该软件包会生成代码。

例如,创建一个名为 examples/mycrate-generate-schema.rs 的文件,其中包含

fn main() -> anyhow::Result<()> {
    femtopb_build::compile_protos_into(
        &["src/myapi/v1/myapi.proto", "src/myapi/v1/foo.proto"],
        &["src"],
        "src",
    )
}

这里,我们使用允许您指定自定义输出目录的 compile_protos_into 函数,并使用软件包的 src 目录,以便将模式放置在应用程序代码的其余部分旁边(您当然可以决定以不同的方式组织结构)。

依赖关系

~11-22MB
~275K SLoC