26 个版本 (12 个稳定版)
6.1.1 | 2024年7月22日 |
---|---|
6.1.0 | 2024年2月29日 |
6.0.0 | 2023年11月2日 |
5.0.0 | 2023年5月25日 |
0.0.5 | 2020年6月19日 |
在 开发工具 中排名 130
每月下载量 34,938
在 18 crates 中使用
34KB
664 行
grpc-build
grpc-build
提供了一种灵活的方式来管理 protobuf 文件,并生成 tonic 所需的 gRPC 代码。
它建立在 tonic_build 的基础上,通过编译目录中的所有 protobuf 文件来扩展其功能。除此之外,这个库还增加了一个功能:完整的 proto 名称注解。在您想使用完整名称(包 + 消息名称)来标识 protobuf 消息的情况下,这可能很有用。因此,对于每个顶级 protobuf 消息,这个库为其生成的结构体添加了一个返回其完整 proto 名称的方法。
给定以下 protobuf 定义
// my_message.proto
package grpc_build;
message Message {}
库将生成标准的 Rust 代码以及为每个消息添加的额外实现。
// Message.rs (generated)
struct Message {}
impl NamedMessage for Message {
/// This returns package (grpc-build) + message name (Message).
const NAME: &'static str = "grpc_build.MyMessage"
}
如果 protobuf 内容有效(值得 代码检查),grpc-build
将负责 protobuf 导入,并生成 mod.rs
文件以允许编译器找到生成的代码。此文件将放置在 输出目录 中。
它既可以作为可以直接在项目中使用的库,也可以作为可以在 CI 管道中使用的二进制文件。
入门指南
作为二进制文件使用
获取 最新的二进制发布版本 并将其用于您的 CI 管道中。
grpc-build build --in-dir="<protobuf directory>" --out-dir="<codegen>"
根据需要,您可以使用 --build-client
(-c
)和 --build-server
(-s
)标志生成 gRPC 客户端和/或服务器。
要覆盖输出目录的内容,请使用 --force
(-f
)标志。
// both client and server, overwriting the existing protogen
grpc-build build -c -s --in-dir="<protobuf directory>" --out-dir="<codegen>" -f
将其作为库使用
将 grpc_build
作为库使用最方便的方式是利用 Rust 的 build.rs
文件。别忘了将 grpc_build
添加到 构建依赖 列表。
// build.rs
use grpc_build::Builder;
fn main() {
Builder::new()
.build_client(true)
.build_server(true)
.force(true)
.out_dir("src/protogen")
.build("protos")
.unwrap();
}
如果您想设置高级编译选项(例如为生成的类型添加额外的 #[derive]
),请使用 build_with_config
函数,该函数公开了底层的 tonic_build::Builder
。
更高级的使用方法是直接使用 get_protos
和 refactor
函数。以下示例几乎与上面的示例相同,只是您不会自动获取 NamedMessage
特性。
fn main() {
let proto_src_dir = "protos";
let proto_out_dir = "src/protogen";
let protos: Vec<_> = crate::base::get_protos(proto_src_dir).collect();
grpc_build::prepare_out_dir(proto_out_dir).unwrap();
tonic_build::configure()
.out_dir(proto_out_dir)
.build_server(true)
.build_client(true)
.compile(&protos, &["."])
.unwrap();
grpc_build::refactor(proto_out_dir).unwrap();
}
许可证
本项目遵循 MIT 许可证。
依赖项
~9-20MB
~278K SLoC