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