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>>20async 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