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