| #![cfg_attr(not(unix), allow(unused_imports))] |
| |
| pub mod hello_world { |
| tonic::include_proto!("helloworld"); |
| } |
| |
| use hello_world::{greeter_client::GreeterClient, HelloRequest}; |
| #[cfg(unix)] |
| use tokio::net::UnixStream; |
| use tonic::transport::{Endpoint, Uri}; |
| use tower::service_fn; |
| |
| #[cfg(unix)] |
| #[tokio::main] |
| async fn main() -> Result<(), Box<dyn std::error::Error>> { |
| // We will ignore this uri because uds do not use it |
| // if your connector does use the uri it will be provided |
| // as the request to the `MakeConnection`. |
| let channel = Endpoint::try_from("http://[::]:50051")? |
| .connect_with_connector(service_fn(|_: Uri| { |
| let path = "/tmp/tonic/helloworld"; |
| |
| // Connect to a Uds socket |
| UnixStream::connect(path) |
| })) |
| .await?; |
| |
| let mut client = GreeterClient::new(channel); |
| |
| let request = tonic::Request::new(HelloRequest { |
| name: "Tonic".into(), |
| }); |
| |
| let response = client.say_hello(request).await?; |
| |
| println!("RESPONSE={:?}", response); |
| |
| Ok(()) |
| } |
| |
| #[cfg(not(unix))] |
| fn main() { |
| panic!("The `uds` example only works on unix systems!"); |
| } |