This is particularly handy when combined with `clap::value_t`.
Here's demo of it working with Clap:
```bash
cargo +stable init --bin tonic-demo
cd tonic-demo
cat <<-EOF >> Cargo.toml
clap = "*"
tonic = { path = "../hyperium/tonic/tonic" }
EOF
cat <<-EOF > src/main.rs
use clap::{value_t, App, Arg};
use tonic::transport::Endpoint;
fn main() {
let matches = App::new("tonic-demo")
.arg(Arg::with_name("host"))
.get_matches();
let x = value_t!(matches.value_of("host"), Endpoint);
println!("{:?}", x);
}
EOF
cargo +stable run -- https://127.0.0.1:443
```
Signed-off-by: Ana Hobden <[email protected]>
In tower 0.4.0 we missed a couple of re-exports that tonic 0.4.0 depends
on. So tonic really depends on tower at least version 0.4.1. Since
specifying your tower depedency as 0.4 means you might get 0.4.0, you
might get build errors when updating tonic. Such as [#553] and [#552].
This fixes that by bumping tonic's dependency on tower to 0.4.4. That
means users will get at least tower version 0.4.4, but semver compatible
updates are still allowed.
Fixes https://github.com/hyperium/tonic/issues/553
[#553]: https://github.com/hyperium/tonic/issues/553
[#552]: https://github.com/hyperium/tonic/issues/552
Bumps routeguide tutorial dependency to tokio 1.0 for compatability with
tonic 0.4. Also adds required rt-multi-thread feature and drops unused
and now unsupported stream feature.
Signed-off-by: hasheddan <[email protected]>
* fix(transport): return Poll::ready until error is consumed
When a lazy connection fails to connect it first
returns Poll::ready from the reconnect service,
yet the subsequent call returns Poll::pending
making tower_balance loop forever.
Instead, on error we return Ready
until the error is consumed in the
call method.
* chore: revert version change
* refactor: Into<Error> bounds for error intead of debug
* Remove fmt::Debug bound for reconnect
Co-authored-by: Helge Hoff <[email protected]>
* tonic: add max http2 frame size to server.
Exposes option to configure the max http2 frame size used by the
underlying hyper server via the `tonic::transport::Server` builder.
Refs: #264
* fix http2_* methods broken in merge conflict
* Upgrade Tonic to Tokio 1.0
Work in progress for updating Tonic to Tokio 1.0. Since tower has not
been released to crates.io, a git dependency is taken instead.
* Upgrade Tonic to Tokio 1.0 phase 2
* tonic: remove tower-* deps
* Apply suggestions from code review
Co-authored-by: Ed Marshall <[email protected]>
Co-authored-by: Lucio Franco <[email protected]>
Instead of failing and bailing when a bad cert is found, ignore one-off
errors for bad certs and continue to load the rest of the store.
These one-off errors mostly affect MacOS users, as found in this
rustls-native-certs issue: https://github.com/ctz/rustls-native-certs/issues/4Fixes: #519
Implements the conversion from `std::io::Error` to `tonic::Status`.
**Motivation:** The `io::Error` conversion is currently left as
unimplemented. It either should be implemented or removed if it won't be
implemented.
**Solution:** Implements the conversion from `std::io::Error` to
`tonic::Status`
* transport: impl Service for Channel instead of GrpcService
This adds tower::Service impl for tonic::transport::Channel
and removes GrpcService impl declaration.
Channel still implements GrpcService, thanks to the general
impl declaration of GrpcService for types who implement Service.
Fixes#481.
* examples: stop using GrpcService to avoid ambiguity
* examples: add timeout example
Adds two methods to `transport::server::Server` for setting HTTP2 server
keepalive interval and timeout as exposed by `hyper::server::Builder`.
Fixes#474
The C++ gRPC server sometimes returns both headers and trailers. An
excerpt from Wireshark:
```
Stream: HEADERS, Stream ID: 1, Length 136, 200 OK
Header: :status: 200 OK
Header: x-middleware: expected value
Header: content-type: application/grpc
Header: grpc-accept-encoding: identity,deflate,gzip
Header: accept-encoding: identity,gzip
Stream: HEADERS, Stream ID: 1, Length 92
Header: grpc-status: 2
Header: grpc-message: Unknown
Header: x-arrow-status: 9
Header: x-arrow-status-message-bin: VW5rbm93bg
```
Before this commit, only the metadata from the trailer would be
available, missing the `x-middleware` header:
```
MetadataMap {
headers: {
"x-arrow-status-message-bin": "VW5rbm93bg",
"x-arrow-status": "9",
},
}
```
* fix(transport): reconnect lazy connections after first failure
Channels created with lazy connections never try to reconnect if the
first connection attempt fails. This is because `Reconnect` returns
`Poll::Ready(Err)` on poll_ready and the service is considered dead.
This change passes a flag to Reconnect to signal if the connection
is intended to be lazy, in which case reconnect returns the error on
the next call.
fixes#452