1 use tonic::{transport::Server, Request, Response, Status}; 2 3 pub mod hello_world { 4 tonic::include_proto!("helloworld"); 5 } 6 7 use hello_world::{ 8 greeter_server::{Greeter, GreeterServer}, 9 HelloReply, HelloRequest, 10 }; 11 12 #[derive(Default)] 13 pub struct MyGreeter {} 14 15 #[tonic::async_trait] 16 impl Greeter for MyGreeter { 17 async fn say_hello( 18 &self, 19 request: Request<HelloRequest>, 20 ) -> Result<Response<HelloReply>, Status> { 21 println!("Got a request from {:?}", request.remote_addr()); 22 23 let reply = hello_world::HelloReply { 24 message: format!("Hello {}!", request.into_inner().name), 25 }; 26 Ok(Response::new(reply)) 27 } 28 } 29 30 #[tokio::main] 31 async fn main() -> Result<(), Box<dyn std::error::Error>> { 32 let addr = "[::1]:50051".parse().unwrap(); 33 let greeter = MyGreeter::default(); 34 35 Server::builder() 36 .add_service(GreeterServer::new(greeter)) 37 .serve(addr) 38 .await?; 39 40 Ok(()) 41 } 42