36 个版本

0.12.1 2024 年 7 月 17 日
0.11.0 2024 年 2 月 8 日
0.10.2 2023 年 9 月 28 日
0.9.2 2023 年 4 月 17 日
0.1.0-alpha.62019 年 11 月 10 日

网络编程 中排名 49

Download history 563931/week @ 2024-05-01 605806/week @ 2024-05-08 632436/week @ 2024-05-15 633316/week @ 2024-05-22 721205/week @ 2024-05-29 810348/week @ 2024-06-05 795002/week @ 2024-06-12 694977/week @ 2024-06-19 726411/week @ 2024-06-26 629499/week @ 2024-07-03 679092/week @ 2024-07-10 635417/week @ 2024-07-17 634756/week @ 2024-07-24 618049/week @ 2024-07-31 679742/week @ 2024-08-07 722674/week @ 2024-08-14

每月下载量 2,785,578
970 个 Crates502 个直接使用)使用

MIT 许可证

95KB
2K SLoC

tonic-build

通过 prost 编译 proto 文件,并为 tonic 生成服务存根和 proto 定义

特性

必需的依赖

[dependencies]
tonic = "<tonic-version>"
prost = "<prost-version>"

[build-dependencies]
tonic-build = "<tonic-version>"

示例

简单示例

build.rs

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tonic_build::compile_protos("proto/service.proto")?;
    Ok(())
}

配置

fn main() -> Result<(), Box<dyn std::error::Error>> {
   tonic_build::configure()
        .build_server(false)
        .compile(
            &["proto/helloworld/helloworld.proto"],
            &["proto/helloworld"],
        )?;
   Ok(())
}

更多示例请参阅 此处

Google API 示例

使用 Google API 的好方法是使用 git 子模块。

所以假设在我们的 proto 文件夹中我们这样做

git submodule add https://github.com/googleapis/googleapis

git submodule update --remote

然后结构中的大量 Google proto 文件将类似于这样

├── googleapis
│   └── google
│       ├── api
│       │   ├── annotations.proto
│       │   ├── client.proto
│       │   ├── field_behavior.proto
│       │   ├── http.proto
│       │   └── resource.proto
│       └── pubsub
│           └── v1
│               ├── pubsub.proto
│               └── schema.proto

然后我们可以通过在 build.rs 中的这个设置生成 Rust 代码

fn main() {
    tonic_build::configure()
        .build_server(false)
        //.out_dir("src/google")  // you can change the generated code's location
        .compile(
            &["proto/googleapis/google/pubsub/v1/pubsub.proto"],
            &["proto/googleapis"], // specify the root location to search proto dependencies
        ).unwrap();
}

然后你可以在代码中这样引用生成的 Rust 代码

pub mod api {
    tonic::include_proto!("google.pubsub.v1");
}
use api::{publisher_client::PublisherClient, ListTopicsRequest};

或者如果你想将生成的代码保存到自己的代码库中,你可以取消注释上面 .out_dir(...) 这行,并在你的库文件中配置一个类似这样的模块

pub mod google {
    #[path = ""]
    pub mod pubsub {
        #[path = "google.pubsub.v1.rs"]
        pub mod v1;
    }
}

请参阅 此处示例

依赖

~0.5–11MB
~121K SLoC