As of `http-body` 0.4.1 its has had a `BoxBody` type similar to
`tonic::body::BoxBody`. It also has `Empty` and `Body::map_{data,err}`.
That means all the custom body things we had in tonic can basically be
replaced with that.
Note that this is a breaking change so we should merge this next time we
decide to ship a breaking release.
The breaking changes are:
- `tonic::body::Body` has been removed. I think its fine for users to
depend directly on `http-body` if they need this trait.
- `tonic::body::BoxBody` is now just a type alias for
`http_body::combinators::BoxBody<Bytes, Status>`. So the methods it
previously had are gone. The replacements are
- `tonic::body::Body::new` -> `http_body::Body::boxed`
- `tonic::body::Body::map_from` -> `http_body::Body::map_data` and
`http_body::Body::map_err` depending on which part you want to map.
- `tonic::body::Body::empty` -> `http_body::Empty`
Additionally a `Sync` bound has been added to a few methods. I actually
don't think this is a breaking change because the old
`tonic::body::Body` trait had `Sync` as a supertrait meaning the `Sync`
requirement was already there.
Fixes https://github.com/hyperium/tonic/issues/557
Examples
Set of examples that show off the features provided by tonic.
Helloworld
Client
$ cargo run --bin helloworld-client
Server
$ cargo run --bin helloworld-server
RouteGuide
Client
$ cargo run --bin routeguide-client
Server
$ cargo run --bin routeguide-server
Authentication
Client
$ cargo run --bin authentication-client
Server
$ cargo run --bin authentication-server
Load Balance
Client
$ cargo run --bin load-balance-client
Server
$ cargo run --bin load-balance-server
Dynamic Load Balance
Client
$ cargo run --bin dynamic-load-balance-client
Server
$ cargo run --bin dynamic-load-balance-server
TLS (rustls)
Client
$ cargo run --bin tls-client
Server
$ cargo run --bin tls-server
Health Checking
Server
$ cargo run --bin health-server
Server Reflection
Server
$ cargo run --bin reflection-server
Tower Middleware
Server
$ cargo run --bin tower-server
Autoreloading Server
Server
systemfd --no-pid -s http::[::1]:50051 -- cargo watch -x 'run --bin autoreload-server'
Notes:
If you are using the codegen feature, then the following dependencies are
required:
The autoload example requires the following crates installed globally: