10583cff8SDavid Pedersen use tonic::{transport::Server, Request, Response, Status};
20583cff8SDavid Pedersen
30583cff8SDavid Pedersen use hello_world::greeter_server::{Greeter, GreeterServer};
40583cff8SDavid Pedersen use hello_world::{HelloReply, HelloRequest};
5*a585a722SMarcus Griep use tonic::codec::CompressionEncoding;
60583cff8SDavid Pedersen
70583cff8SDavid Pedersen pub mod hello_world {
80583cff8SDavid Pedersen tonic::include_proto!("helloworld");
90583cff8SDavid Pedersen }
100583cff8SDavid Pedersen
110583cff8SDavid Pedersen #[derive(Default)]
120583cff8SDavid Pedersen pub struct MyGreeter {}
130583cff8SDavid Pedersen
140583cff8SDavid Pedersen #[tonic::async_trait]
150583cff8SDavid Pedersen impl Greeter for MyGreeter {
say_hello( &self, request: Request<HelloRequest>, ) -> Result<Response<HelloReply>, Status>160583cff8SDavid Pedersen async fn say_hello(
170583cff8SDavid Pedersen &self,
180583cff8SDavid Pedersen request: Request<HelloRequest>,
190583cff8SDavid Pedersen ) -> Result<Response<HelloReply>, Status> {
200583cff8SDavid Pedersen println!("Got a request from {:?}", request.remote_addr());
210583cff8SDavid Pedersen
220583cff8SDavid Pedersen let reply = hello_world::HelloReply {
230583cff8SDavid Pedersen message: format!("Hello {}!", request.into_inner().name),
240583cff8SDavid Pedersen };
250583cff8SDavid Pedersen Ok(Response::new(reply))
260583cff8SDavid Pedersen }
270583cff8SDavid Pedersen }
280583cff8SDavid Pedersen
290583cff8SDavid Pedersen #[tokio::main]
main() -> Result<(), Box<dyn std::error::Error>>300583cff8SDavid Pedersen async fn main() -> Result<(), Box<dyn std::error::Error>> {
310583cff8SDavid Pedersen let addr = "[::1]:50051".parse().unwrap();
320583cff8SDavid Pedersen let greeter = MyGreeter::default();
330583cff8SDavid Pedersen
340583cff8SDavid Pedersen println!("GreeterServer listening on {}", addr);
350583cff8SDavid Pedersen
36*a585a722SMarcus Griep let service = GreeterServer::new(greeter)
37*a585a722SMarcus Griep .send_compressed(CompressionEncoding::Gzip)
38*a585a722SMarcus Griep .accept_compressed(CompressionEncoding::Gzip);
390583cff8SDavid Pedersen
400583cff8SDavid Pedersen Server::builder().add_service(service).serve(addr).await?;
410583cff8SDavid Pedersen
420583cff8SDavid Pedersen Ok(())
430583cff8SDavid Pedersen }
44