A programmatic API to the grpc-rs compiler.
protoc
) installed and in
PATH
.build.rs
For a project laid out like so: ``` $ tree . ├── build.rs ├── Cargo.toml └── src ├── client.rs ├── protos │ ├── example │ │ └── diner.proto │ └── mod.rs └── server.rs
3 directories, 7 files ```
The build.rs
might look like:
```rust
extern crate protoc_grpcio;
fn main() { let protoroot = "src/protos"; println!("cargo:rerun-if-changed={}", protoroot); protocgrpcio::compilegrpcprotos( &["example/diner.proto"], &[protoroot], &proto_root, None ).expect("Failed to compile gRPC definitions!"); } ```
Cargo.toml
And the Cargo.toml
might look like:
```toml
[package]
build = "build.rs"
[lib] name = "protos" path = "src/protos/mod.rs"
[[bin]] name = "server" path = "src/server.rs"
[[bin]] name = "client" path = "src/client.rs"
[dependencies] futures = "0.1.16" grpcio = "0.4.3" protobuf = "~2"
[build-dependencies] protoc-grpcio = "1.0.2" ```
You can inspect this example under example/
by compiling and running the example
server in one shell session:
cargo run --manifest-path example/Cargo.toml --bin server
...
Finished dev [unoptimized + debuginfo] target(s) in 27.97 secs
Running `example/target/debug/server`
listening on 127.0.0.1:34431
And then running the client in another:
$ cargo run --manifest-path example/Cargo.toml --bin client 34431
...
Finished dev [unoptimized + debuginfo] target(s) in 1.28 secs
Running `example/target/debug/client 34431`
Ate items: SPAM items: EGGS and got charged $0.30
Credit to both the TiKV project developers for (grpc-rs) and Stepan Koltsov (@stepancheg, rust-protobuf) for their amazing work bringing Protocol Buffers and gRPC support to Rust.