#grpc #tonic #proto #protobuf-compiler

构建 grpc-build

让 gRPC 编译变得简单

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

Download history 6076/week @ 2024-04-29 5788/week @ 2024-05-06 6761/week @ 2024-05-13 7468/week @ 2024-05-20 5711/week @ 2024-05-27 9174/week @ 2024-06-03 6619/week @ 2024-06-10 4237/week @ 2024-06-17 6644/week @ 2024-06-24 5242/week @ 2024-07-01 5684/week @ 2024-07-08 7435/week @ 2024-07-15 8638/week @ 2024-07-22 9359/week @ 2024-07-29 8622/week @ 2024-08-05 8178/week @ 2024-08-12

每月下载量 34,938
18 crates 中使用

MIT 许可协议

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 管道中使用的二进制文件。

文档 - Crates.io

入门指南

作为二进制文件使用

获取 最新的二进制发布版本 并将其用于您的 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_protosrefactor 函数。以下示例几乎与上面的示例相同,只是您不会自动获取 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