1 use tonic_types::StatusExt;
2
3 use hello_world::greeter_client::GreeterClient;
4 use hello_world::HelloRequest;
5
6 pub mod hello_world {
7 tonic::include_proto!("helloworld");
8 }
9
10 #[tokio::main]
main() -> Result<(), Box<dyn std::error::Error>>11 async fn main() -> Result<(), Box<dyn std::error::Error>> {
12 let mut client = GreeterClient::connect("http://[::1]:50051").await?;
13
14 let request = tonic::Request::new(HelloRequest {
15 // Valid request
16 // name: "Tonic".into(),
17 // Name cannot be empty
18 name: "".into(),
19 // Name is too long
20 // name: "some excessively long name".into(),
21 });
22
23 let response = match client.say_hello(request).await {
24 Ok(response) => response,
25 Err(status) => {
26 println!(" Error status received. Extracting error details...\n");
27
28 let err_details = status.get_error_details();
29
30 if let Some(bad_request) = err_details.bad_request() {
31 // Handle bad_request details
32 println!(" {:?}", bad_request);
33 }
34 if let Some(help) = err_details.help() {
35 // Handle help details
36 println!(" {:?}", help);
37 }
38 if let Some(localized_message) = err_details.localized_message() {
39 // Handle localized_message details
40 println!(" {:?}", localized_message);
41 }
42
43 println!();
44
45 return Ok(());
46 }
47 };
48
49 println!(" Successful response received.\n\n {:?}\n", response);
50
51 Ok(())
52 }
53