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