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.6 | 2019 年 11 月 10 日 |
在 网络编程 中排名 49
每月下载量 2,785,578
被 970 个 Crates(502 个直接使用)使用
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