Files
2022-02-10 13:20:52 -05:00

105 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# tonic-build
Compiles proto files via prost and generates service stubs and proto definitiones for use with tonic.
## Features
Required dependencies
```toml
[dependencies]
tonic = <tonic-version>
prost = <prost-version>
[build-dependencies]
tonic-build = <tonic-version>
```
## Examples
### Simple
In `build.rs`:
```rust
fn main() -> Result<(), Box<dyn std::error::Error>> {
tonic_build::compile_protos("proto/service.proto")?;
Ok(())
}
```
### Configuration
```rust
fn main() -> Result<(), Box<dyn std::error::Error>> {
tonic_build::configure()
.build_server(false)
.compile(
&["proto/helloworld/helloworld.proto"],
&["proto/helloworld"],
)?;
Ok(())
}
```
See [more examples here](https://github.com/hyperium/tonic/tree/master/examples)
### Google APIs example
A good way to use Google API is probably using git submodules.
So suppose in our `proto` folder we do:
```
git submodule add https://github.com/googleapis/googleapis
git submodule update --remote
```
And a bunch of Google proto files in structure will be like this:
```
├── googleapis
│   └── google
│   ├── api
│   │   ├── annotations.proto
│   │   ├── client.proto
│   │   ├── field_behavior.proto
│   │   ├── http.proto
│   │   └── resource.proto
│   └── pubsub
│   └── v1
│   ├── pubsub.proto
│   └── schema.proto
```
Then we can generate Rust code via this setup in our `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();
}
```
Then you can reference the generated Rust like this this in your code:
```rust
pub mod api {
tonic::include_proto!("google.pubsub.v1");
}
use api::{publisher_client::PublisherClient, ListTopicsRequest};
```
Or if you want to save the generated code in your own code base,
you can uncomment the line `.out_dir(...)` above, and in your lib file
config a mod like this:
```rust
pub mod google {
#[path = ""]
pub mod pubsub {
#[path = "google.pubsub.v1.rs"]
pub mod v1;
}
}
```
See [the example here](https://github.com/hyperium/tonic/tree/master/examples/src/gcp)