1d9a481baSLucio Franco use tonic::{transport::Server, Request, Response, Status};
2d9a481baSLucio Franco
3d9a481baSLucio Franco pub mod hello_world {
4d9a481baSLucio Franco tonic::include_proto!("helloworld");
5d9a481baSLucio Franco }
6d9a481baSLucio Franco
7d9a481baSLucio Franco pub mod echo {
8df8dd896Stottoto tonic::include_proto!("grpc.examples.unaryecho");
9d9a481baSLucio Franco }
10d9a481baSLucio Franco
11d9a481baSLucio Franco use hello_world::{
12d9a481baSLucio Franco greeter_server::{Greeter, GreeterServer},
13d9a481baSLucio Franco HelloReply, HelloRequest,
14d9a481baSLucio Franco };
15d9a481baSLucio Franco
16d9a481baSLucio Franco use echo::{
17d9a481baSLucio Franco echo_server::{Echo, EchoServer},
18d9a481baSLucio Franco EchoRequest, EchoResponse,
19d9a481baSLucio Franco };
20d9a481baSLucio Franco
21d9a481baSLucio Franco #[tokio::main]
main() -> Result<(), Box<dyn std::error::Error>>22d9a481baSLucio Franco async fn main() -> Result<(), Box<dyn std::error::Error>> {
23d9a481baSLucio Franco let addr = "[::1]:50051".parse().unwrap();
24d9a481baSLucio Franco
25d9a481baSLucio Franco let greeter = GreeterServer::new(MyGreeter::default());
26d9a481baSLucio Franco let echo = EchoServer::new(MyEcho::default());
27d9a481baSLucio Franco
28d9a481baSLucio Franco Server::builder()
29d9a481baSLucio Franco .add_service(greeter)
30d9a481baSLucio Franco .add_service(echo)
31d9a481baSLucio Franco .serve(addr)
32d9a481baSLucio Franco .await?;
33d9a481baSLucio Franco
34d9a481baSLucio Franco Ok(())
35d9a481baSLucio Franco }
36d9a481baSLucio Franco
37d9a481baSLucio Franco #[derive(Default)]
38d9a481baSLucio Franco pub struct MyGreeter {}
39d9a481baSLucio Franco
40d9a481baSLucio Franco #[tonic::async_trait]
41d9a481baSLucio Franco impl Greeter for MyGreeter {
say_hello( &self, request: Request<HelloRequest>, ) -> Result<Response<HelloReply>, Status>42d9a481baSLucio Franco async fn say_hello(
43d9a481baSLucio Franco &self,
44d9a481baSLucio Franco request: Request<HelloRequest>,
45d9a481baSLucio Franco ) -> Result<Response<HelloReply>, Status> {
46d9a481baSLucio Franco let reply = hello_world::HelloReply {
4782facb62SLucio Franco message: format!("Hello {}!", request.into_inner().name),
48d9a481baSLucio Franco };
49d9a481baSLucio Franco Ok(Response::new(reply))
50d9a481baSLucio Franco }
51d9a481baSLucio Franco }
52d9a481baSLucio Franco
53d9a481baSLucio Franco #[derive(Default)]
54*9f5fc3b9Stottoto pub struct MyEcho {}
55d9a481baSLucio Franco
56d9a481baSLucio Franco #[tonic::async_trait]
57d9a481baSLucio Franco impl Echo for MyEcho {
unary_echo( &self, request: Request<EchoRequest>, ) -> Result<Response<EchoResponse>, Status>58d9a481baSLucio Franco async fn unary_echo(
59d9a481baSLucio Franco &self,
60d9a481baSLucio Franco request: Request<EchoRequest>,
61d9a481baSLucio Franco ) -> Result<Response<EchoResponse>, Status> {
62d9a481baSLucio Franco let message = request.into_inner().message;
63d9a481baSLucio Franco Ok(Response::new(EchoResponse { message }))
64d9a481baSLucio Franco }
65d9a481baSLucio Franco }
66