feat(client): expose connect types without proto feature (#2377)

Make it possible to refer to Connected, Connection, HttpConnector, etc.
without enabling either of the http1/http2 features. This makes feature
selection work better for downstream libraries like hyper-openssl, which
don't want to commit to any particular protocol.

Fix #2376.
This commit is contained in:
Nikhil Benesch
2020-12-28 18:50:28 -05:00
committed by GitHub
parent 3d6bdbe850
commit 73a59e5fc7
7 changed files with 1270 additions and 1241 deletions

1233
src/client/client.rs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -27,6 +27,7 @@ use super::{Connected, Connection};
///
/// Sets the [`HttpInfo`](HttpInfo) value on responses, which includes
/// transport information such as the remote socket address used.
#[cfg_attr(docsrs, doc(cfg(feature = "tcp")))]
#[derive(Clone)]
pub struct HttpConnector<R = GaiResolver> {
config: Arc<Config>,

View File

@@ -83,13 +83,20 @@ use std::fmt;
use ::http::Extensions;
#[cfg(feature = "tcp")]
pub mod dns;
#[cfg(feature = "tcp")]
mod http;
#[cfg(feature = "tcp")]
pub use self::http::{HttpConnector, HttpInfo};
pub use self::sealed::Connect;
cfg_feature! {
#![feature = "tcp"]
pub use self::http::{HttpConnector, HttpInfo};
pub mod dns;
mod http;
}
cfg_feature! {
#![any(feature = "http1", feature = "http2")]
pub use self::sealed::Connect;
}
/// Describes a type returned by a connector.
pub trait Connection {
@@ -260,6 +267,7 @@ where
}
}
#[cfg(any(feature = "http1", feature = "http2"))]
pub(super) mod sealed {
use std::error::Error as StdError;

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@ use futures_channel::oneshot;
#[cfg(feature = "runtime")]
use tokio::time::{Duration, Instant, Interval};
use super::Ver;
use super::client::Ver;
use crate::common::{task, exec::Exec, Future, Pin, Poll, Unpin};
// FIXME: allow() required due to `impl Trait` leaking types to this lint

View File

@@ -58,7 +58,11 @@
#[doc(hidden)]
pub use http;
#[cfg(any(feature = "http1", feature = "http2"))]
#[cfg(any(
feature = "http1",
feature = "http2",
all(feature = "client", feature = "tcp")
))]
#[macro_use]
extern crate tracing;
@@ -89,9 +93,11 @@ cfg_proto! {
}
cfg_feature! {
#![all(feature = "client", any(feature = "http1", feature = "http2"))]
#![all(feature = "client")]
pub mod client;
#[cfg(any(feature = "http1", feature = "http2"))]
#[doc(no_inline)]
pub use crate::client::Client;
}

View File

@@ -91,6 +91,7 @@ where
self.read_buf_strategy = ReadStrategy::Exact(sz);
}
#[cfg(feature = "server")]
pub fn set_write_strategy_flatten(&mut self) {
// this should always be called only at construction time,
// so this assert is here to catch myself
@@ -475,6 +476,7 @@ impl<B> WriteBuf<B>
where
B: Buf,
{
#[cfg(feature = "server")]
fn set_strategy(&mut self, strategy: WriteStrategy) {
self.strategy = strategy;
}