|
5 | 5 | //! hyper will automatically use HTTP/2 if a client starts talking HTTP/2,
|
6 | 6 | //! otherwise HTTP/1.1 will be used.
|
7 | 7 | use async_stream::stream;
|
8 |
| -use core::task::{Context, Poll}; |
9 |
| -use futures_util::{future::TryFutureExt, stream::Stream}; |
| 8 | +use futures_util::future::TryFutureExt; |
| 9 | +use hyper::server::accept; |
10 | 10 | use hyper::service::{make_service_fn, service_fn};
|
11 | 11 | use hyper::{Body, Method, Request, Response, Server, StatusCode};
|
12 | 12 | use rustls::internal::pemfile;
|
13 |
| -use std::pin::Pin; |
14 | 13 | use std::vec::Vec;
|
15 | 14 | use std::{env, fs, io, sync};
|
16 |
| -use tokio::net::{TcpListener, TcpStream}; |
17 |
| -use tokio_rustls::server::TlsStream; |
| 15 | +use tokio::net::TcpListener; |
18 | 16 | use tokio_rustls::TlsAcceptor;
|
19 | 17 |
|
20 | 18 | fn main() {
|
@@ -70,34 +68,16 @@ async fn run_server() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
70 | 68 | yield stream.await;
|
71 | 69 | }
|
72 | 70 | };
|
| 71 | + let acceptor = accept::from_stream(incoming_tls_stream); |
73 | 72 | let service = make_service_fn(|_| async { Ok::<_, io::Error>(service_fn(echo)) });
|
74 |
| - let server = Server::builder(HyperAcceptor { |
75 |
| - acceptor: Box::pin(incoming_tls_stream), |
76 |
| - }) |
77 |
| - .serve(service); |
| 73 | + let server = Server::builder(acceptor).serve(service); |
78 | 74 |
|
79 | 75 | // Run the future, keep going until an error occurs.
|
80 | 76 | println!("Starting to serve on https://{}.", addr);
|
81 | 77 | server.await?;
|
82 | 78 | Ok(())
|
83 | 79 | }
|
84 | 80 |
|
85 |
| -struct HyperAcceptor<'a> { |
86 |
| - acceptor: Pin<Box<dyn Stream<Item = Result<TlsStream<TcpStream>, io::Error>> + 'a>>, |
87 |
| -} |
88 |
| - |
89 |
| -impl hyper::server::accept::Accept for HyperAcceptor<'_> { |
90 |
| - type Conn = TlsStream<TcpStream>; |
91 |
| - type Error = io::Error; |
92 |
| - |
93 |
| - fn poll_accept( |
94 |
| - mut self: Pin<&mut Self>, |
95 |
| - cx: &mut Context, |
96 |
| - ) -> Poll<Option<Result<Self::Conn, Self::Error>>> { |
97 |
| - Pin::new(&mut self.acceptor).poll_next(cx) |
98 |
| - } |
99 |
| -} |
100 |
| - |
101 | 81 | // Custom echo service, handling two different routes and a
|
102 | 82 | // catch-all 404 responder.
|
103 | 83 | async fn echo(req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
|
|
0 commit comments