xref: /tonic/interop/src/bin/server.rs (revision 44ccf49d)
1 use interop::server;
2 use tonic::transport::Server;
3 use tonic::transport::{Identity, ServerTlsConfig};
4 
5 #[derive(Debug)]
6 struct Opts {
7     use_tls: bool,
8 }
9 
10 impl Opts {
parse() -> Result<Self, pico_args::Error>11     fn parse() -> Result<Self, pico_args::Error> {
12         let mut pargs = pico_args::Arguments::from_env();
13         Ok(Self {
14             use_tls: pargs.contains("--use_tls"),
15         })
16     }
17 }
18 
19 #[tokio::main]
main() -> std::result::Result<(), Box<dyn std::error::Error>>20 async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
21     interop::trace_init();
22 
23     let matches = Opts::parse()?;
24 
25     let addr = "127.0.0.1:10000".parse().unwrap();
26 
27     let mut builder = Server::builder();
28 
29     if matches.use_tls {
30         let cert = std::fs::read_to_string("interop/data/server1.pem")?;
31         let key = std::fs::read_to_string("interop/data/server1.key")?;
32         let identity = Identity::from_pem(cert, key);
33 
34         builder = builder.tls_config(ServerTlsConfig::new().identity(identity))?;
35     }
36 
37     let test_service = server::TestServiceServer::new(server::TestService::default());
38     let unimplemented_service =
39         server::UnimplementedServiceServer::new(server::UnimplementedService::default());
40 
41     // Wrap this test_service with a service that will echo headers as trailers.
42     let test_service_svc = server::EchoHeadersSvc::new(test_service);
43 
44     builder
45         .add_service(test_service_svc)
46         .add_service(unimplemented_service)
47         .serve(addr)
48         .await?;
49 
50     Ok(())
51 }
52