12 个不稳定版本 (3 个破坏性更新)
0.5.0 | 2024 年 8 月 1 日 |
---|---|
0.4.5 | 2024 年 4 月 19 日 |
0.3.0 |
|
0.2.0 | 2024 年 4 月 3 日 |
0.1.4 | 2024 年 4 月 3 日 |
#767 在 嵌入式开发
每月 605 次下载
61KB
1K SLoC
femtopb-build
femtopb
库的代码生成器/protobuf 编译器。在内部使用 protox
和 prost-build
,但目前仅公开了它们完整 API 的一小部分。
使用方法
该库旨在用于您的 build.rs
脚本,在构建时生成 Rust 代码。首先,像这样将 femtopb
和 femtopb-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