blob: f74aa9f31bca3d8ce1ca549230d767194080be2e [file] [log] [blame]
use tonic_types::{ErrorDetail, StatusExt};
use hello_world::greeter_client::GreeterClient;
use hello_world::HelloRequest;
pub mod hello_world {
tonic::include_proto!("helloworld");
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut client = GreeterClient::connect("http://[::1]:50051").await?;
let request = tonic::Request::new(HelloRequest {
// Valid request
// name: "Tonic".into(),
// Name cannot be empty
name: "".into(),
// Name is too long
// name: "some excessively long name".into(),
});
let response = match client.say_hello(request).await {
Ok(response) => response,
Err(status) => {
println!(" Error status received. Extracting error details...\n");
let err_details = status.get_error_details_vec();
for (i, err_detail) in err_details.iter().enumerate() {
println!("err_detail[{i}]");
match err_detail {
ErrorDetail::BadRequest(bad_request) => {
// Handle bad_request details
println!(" {:?}", bad_request);
}
ErrorDetail::Help(help) => {
// Handle help details
println!(" {:?}", help);
}
ErrorDetail::LocalizedMessage(localized_message) => {
// Handle localized_message details
println!(" {:?}", localized_message);
}
_ => {}
}
}
println!();
return Ok(());
}
};
println!(" Successfull response received.\n\n {:?}\n", response);
Ok(())
}