Skip to content

Commit 0766d3f

Browse files
authored
feat(server): remove server::conn::{Http, Connection} types (#3013)
The connection types have been split into version-specific types, in the `server::conn::{http1, http2}` modules. Closes #3012 BREAKING CHANGE: Either choose a version-specific `Connection` type, or look for the auto-version type in `hyper-util`.
1 parent fc4d335 commit 0766d3f

22 files changed

+159
-1260
lines changed

benches/pipeline.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use http_body_util::Full;
1414
use tokio::net::TcpListener;
1515
use tokio::sync::oneshot;
1616

17-
use hyper::server::conn::Http;
17+
use hyper::server::conn::http1;
1818
use hyper::service::service_fn;
1919
use hyper::Response;
2020

@@ -41,7 +41,7 @@ fn hello_world_16(b: &mut test::Bencher) {
4141
loop {
4242
let (stream, _addr) = listener.accept().await.expect("accept");
4343

44-
Http::new()
44+
http1::Builder::new()
4545
.pipeline_flush(true)
4646
.serve_connection(
4747
stream,

benches/server.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use futures_util::{stream, StreamExt};
1313
use http_body_util::{BodyExt, Full, StreamBody};
1414
use tokio::sync::oneshot;
1515

16-
use hyper::server::conn::Http;
16+
use hyper::server::conn::http1;
1717
use hyper::service::service_fn;
1818
use hyper::Response;
1919

@@ -38,7 +38,7 @@ macro_rules! bench_server {
3838
loop {
3939
let (stream, _) = listener.accept().await.expect("accept");
4040

41-
Http::new()
41+
http1::Builder::new()
4242
.serve_connection(
4343
stream,
4444
service_fn(|_| async {

examples/echo.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::net::SocketAddr;
55
use bytes::Bytes;
66
use http_body_util::{combinators::BoxBody, BodyExt, Empty, Full};
77
use hyper::body::Body as _;
8-
use hyper::server::conn::Http;
8+
use hyper::server::conn::http1;
99
use hyper::service::service_fn;
1010
use hyper::{Method, Recv, Request, Response, StatusCode};
1111
use tokio::net::TcpListener;
@@ -87,7 +87,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
8787
let (stream, _) = listener.accept().await?;
8888

8989
tokio::task::spawn(async move {
90-
if let Err(err) = Http::new().serve_connection(stream, service_fn(echo)).await {
90+
if let Err(err) = http1::Builder::new()
91+
.serve_connection(stream, service_fn(echo))
92+
.await
93+
{
9194
println!("Error serving connection: {:?}", err);
9295
}
9396
});

examples/gateway.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![deny(warnings)]
22

3-
use hyper::{server::conn::Http, service::service_fn};
3+
use hyper::{server::conn::http1, service::service_fn};
44
use std::net::SocketAddr;
55
use tokio::net::{TcpListener, TcpStream};
66

@@ -56,7 +56,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
5656
});
5757

5858
tokio::task::spawn(async move {
59-
if let Err(err) = Http::new().serve_connection(stream, service).await {
59+
if let Err(err) = http1::Builder::new()
60+
.serve_connection(stream, service)
61+
.await
62+
{
6063
println!("Failed to servce connection: {:?}", err);
6164
}
6265
});

examples/hello.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::net::SocketAddr;
55

66
use bytes::Bytes;
77
use http_body_util::Full;
8-
use hyper::server::conn::Http;
8+
use hyper::server::conn::http1;
99
use hyper::service::service_fn;
1010
use hyper::{Recv, Request, Response};
1111
use tokio::net::TcpListener;
@@ -26,7 +26,7 @@ pub async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
2626
let (stream, _) = listener.accept().await?;
2727

2828
tokio::task::spawn(async move {
29-
if let Err(err) = Http::new()
29+
if let Err(err) = http1::Builder::new()
3030
.serve_connection(stream, service_fn(hello))
3131
.await
3232
{

examples/http_proxy.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::net::SocketAddr;
55
use bytes::Bytes;
66
use http_body_util::{combinators::BoxBody, BodyExt, Empty, Full};
77
use hyper::client::conn::http1::Builder;
8-
use hyper::server::conn::Http;
8+
use hyper::server::conn::http1;
99
use hyper::service::service_fn;
1010
use hyper::upgrade::Upgraded;
1111
use hyper::{Method, Recv, Request, Response};
@@ -30,7 +30,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
3030
let (stream, _) = listener.accept().await?;
3131

3232
tokio::task::spawn(async move {
33-
if let Err(err) = Http::new()
33+
if let Err(err) = http1::Builder::new()
3434
.http1_preserve_header_case(true)
3535
.http1_title_case_headers(true)
3636
.serve_connection(stream, service_fn(proxy))

examples/multi_server.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::net::SocketAddr;
66
use bytes::Bytes;
77
use futures_util::future::join;
88
use http_body_util::Full;
9-
use hyper::server::conn::Http;
9+
use hyper::server::conn::http1;
1010
use hyper::service::service_fn;
1111
use hyper::{Recv, Request, Response};
1212
use tokio::net::TcpListener;
@@ -35,7 +35,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
3535
let (stream, _) = listener.accept().await.unwrap();
3636

3737
tokio::task::spawn(async move {
38-
if let Err(err) = Http::new()
38+
if let Err(err) = http1::Builder::new()
3939
.serve_connection(stream, service_fn(index1))
4040
.await
4141
{
@@ -51,7 +51,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
5151
let (stream, _) = listener.accept().await.unwrap();
5252

5353
tokio::task::spawn(async move {
54-
if let Err(err) = Http::new()
54+
if let Err(err) = http1::Builder::new()
5555
.serve_connection(stream, service_fn(index2))
5656
.await
5757
{

examples/params.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
use bytes::Bytes;
55
use http_body_util::{combinators::BoxBody, BodyExt, Empty, Full};
6-
use hyper::server::conn::Http;
6+
use hyper::server::conn::http1;
77
use hyper::service::service_fn;
88
use hyper::{Method, Recv, Request, Response, StatusCode};
99
use tokio::net::TcpListener;
@@ -126,7 +126,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
126126
let (stream, _) = listener.accept().await?;
127127

128128
tokio::task::spawn(async move {
129-
if let Err(err) = Http::new()
129+
if let Err(err) = http1::Builder::new()
130130
.serve_connection(stream, service_fn(param_example))
131131
.await
132132
{

examples/send_file.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
use std::net::SocketAddr;
44

5-
use hyper::server::conn::Http;
5+
use hyper::server::conn::http1;
66
use tokio::net::TcpListener;
77

88
use bytes::Bytes;
@@ -26,7 +26,7 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
2626
let (stream, _) = listener.accept().await?;
2727

2828
tokio::task::spawn(async move {
29-
if let Err(err) = Http::new()
29+
if let Err(err) = http1::Builder::new()
3030
.serve_connection(stream, service_fn(response_examples))
3131
.await
3232
{

examples/service_struct_impl.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use bytes::Bytes;
22
use http_body_util::Full;
3-
use hyper::server::conn::Http;
3+
use hyper::server::conn::http1;
44
use hyper::service::Service;
55
use hyper::{Recv, Request, Response};
66
use tokio::net::TcpListener;
@@ -22,7 +22,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
2222
let (stream, _) = listener.accept().await?;
2323

2424
tokio::task::spawn(async move {
25-
if let Err(err) = Http::new()
25+
if let Err(err) = http1::Builder::new()
2626
.serve_connection(stream, Svc { counter: 81818 })
2727
.await
2828
{

examples/single_threaded.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![deny(warnings)]
22

3-
use hyper::server::conn::Http;
3+
use hyper::server::conn::http2;
44
use std::cell::Cell;
55
use std::net::SocketAddr;
66
use std::rc::Rc;
@@ -84,8 +84,7 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
8484
});
8585

8686
tokio::task::spawn_local(async move {
87-
if let Err(err) = Http::new()
88-
.with_executor(LocalExec)
87+
if let Err(err) = http2::Builder::new(LocalExec)
8988
.serve_connection(stream, service)
9089
.await
9190
{
@@ -95,6 +94,8 @@ async fn run() -> Result<(), Box<dyn std::error::Error>> {
9594
}
9695
}
9796

97+
// NOTE: This part is only needed for HTTP/2. HTTP/1 doesn't need an executor.
98+
//
9899
// Since the Server needs to spawn some background tasks, we needed
99100
// to configure an Executor that can spawn !Send futures...
100101
#[derive(Clone, Copy, Debug)]

examples/state.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::sync::{
88

99
use bytes::Bytes;
1010
use http_body_util::Full;
11-
use hyper::{server::conn::Http, service::service_fn};
11+
use hyper::{server::conn::http1, service::service_fn};
1212
use hyper::{Error, Response};
1313
use tokio::net::TcpListener;
1414

@@ -46,7 +46,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
4646
}
4747
});
4848

49-
if let Err(err) = Http::new().serve_connection(stream, service).await {
49+
if let Err(err) = http1::Builder::new()
50+
.serve_connection(stream, service)
51+
.await
52+
{
5053
println!("Error serving connection: {:?}", err);
5154
}
5255
}

examples/upgrades.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use tokio::sync::watch;
1111
use bytes::Bytes;
1212
use http_body_util::Empty;
1313
use hyper::header::{HeaderValue, UPGRADE};
14-
use hyper::server::conn::Http;
14+
use hyper::server::conn::http1;
1515
use hyper::service::service_fn;
1616
use hyper::upgrade::Upgraded;
1717
use hyper::{Recv, Request, Response, StatusCode};
@@ -149,7 +149,7 @@ async fn main() {
149149

150150
let mut rx = rx.clone();
151151
tokio::task::spawn(async move {
152-
let conn = Http::new().serve_connection(stream, service_fn(server_upgrade));
152+
let conn = http1::Builder::new().serve_connection(stream, service_fn(server_upgrade));
153153

154154
// Don't forget to enable upgrades on the connection.
155155
let mut conn = conn.with_upgrades();

examples/web_api.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::net::SocketAddr;
44

55
use bytes::{Buf, Bytes};
66
use http_body_util::{BodyExt, Full};
7-
use hyper::server::conn::Http;
7+
use hyper::server::conn::http1;
88
use hyper::service::service_fn;
99
use hyper::{header, Method, Recv, Request, Response, StatusCode};
1010
use tokio::net::{TcpListener, TcpStream};
@@ -113,7 +113,10 @@ async fn main() -> Result<()> {
113113
tokio::task::spawn(async move {
114114
let service = service_fn(move |req| response_examples(req));
115115

116-
if let Err(err) = Http::new().serve_connection(stream, service).await {
116+
if let Err(err) = http1::Builder::new()
117+
.serve_connection(stream, service)
118+
.await
119+
{
117120
println!("Failed to serve connection: {:?}", err);
118121
}
119122
});

src/common/exec.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub(crate) type BoxSendFuture = Pin<Box<dyn Future<Output = ()> + Send>>;
2020
// TODO: with the `runtime`feature, `Exec::Default` used `tokio::spawn`. With the
2121
// removal of the opt-in default runtime, this should be refactored.
2222
#[derive(Clone)]
23-
pub enum Exec {
23+
pub(crate) enum Exec {
2424
Default,
2525
Executor(Arc<dyn Executor<BoxSendFuture> + Send + Sync>),
2626
}

src/common/io/rewind.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub(crate) struct Rewind<T> {
1414
}
1515

1616
impl<T> Rewind<T> {
17-
#[cfg(any(all(feature = "http2", feature = "server"), test))]
17+
#[cfg(test)]
1818
pub(crate) fn new(io: T) -> Self {
1919
Rewind {
2020
pre: None,
@@ -29,7 +29,7 @@ impl<T> Rewind<T> {
2929
}
3030
}
3131

32-
#[cfg(any(all(feature = "http1", feature = "http2", feature = "server"), test))]
32+
#[cfg(test)]
3333
pub(crate) fn rewind(&mut self, bs: Bytes) {
3434
debug_assert!(self.pre.is_none());
3535
self.pre = Some(bs);

0 commit comments

Comments
 (0)