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