diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a081bd37..16d7463c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -87,3 +87,17 @@ jobs: - name: docs run: cargo doc --no-deps + + check_features: + name: Check feature combinations + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + + - name: Install cargo-hack + run: cargo install cargo-hack + + - name: Check all feature combinations works properly + # * `--feature-powerset` - run for the feature powerset of the package + # * `--no-dev-deps` - build without dev-dependencies to avoid https://github.com/rust-lang/cargo/issues/4866 + run: cargo hack check --feature-powerset --no-dev-deps diff --git a/Cargo.toml b/Cargo.toml index 42d9f77f..9f22dc7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ description = "Surf the web - HTTP client framework" keywords = ["http", "client", "framework", "request", "async"] categories = ["web-programming", "web-programming::http-client"] authors = [ - "Yoshua Wuyts ", + "Yoshua Wuyts ", "dignifiedquire ", "Renée Kooi ", "Jeremiah Senkpiel " @@ -21,9 +21,10 @@ edition = "2018" # `.github/workflows/ci.yaml` are updated accordingly default = ["curl-client", "middleware-logger", "encoding"] curl-client = ["http-client/curl_client", "once_cell", "default-client"] -h1-client = ["http-client/h1_client", "default-client"] +h1-client = ["http-client/h1_client", "http-client/native-tls", "default-client"] hyper-client = ["http-client/hyper_client", "once_cell", "default-client", "async-std/tokio02"] wasm-client = ["http-client/wasm_client", "default-client"] +# this feature flag is no longer necessary. default-client = [] middleware-logger = [] # requires web-sys for TextDecoder on wasm @@ -35,7 +36,7 @@ log = { version = "0.4.7", features = ["kv_unstable"] } mime_guess = "2.0.3" serde = "1.0.97" serde_json = "1.0.40" -http-client = { version = "6.1.0", default-features = false } +http-client = { version = "6.3.0", default-features = false } http-types = "2.5.0" async-std = { version = "1.6.0", default-features = false, features = ["std"] } async-trait = "0.1.36" diff --git a/src/client.rs b/src/client.rs index 5f450a59..7b7db7cb 100644 --- a/src/client.rs +++ b/src/client.rs @@ -10,7 +10,7 @@ use cfg_if::cfg_if; cfg_if! { if #[cfg(feature = "curl-client")] { use http_client::isahc::IsahcClient as DefaultClient; - } else if #[cfg(feature = "wasm-client")] { + } else if #[cfg(all(feature = "wasm-client", target_arch = "wasm32"))] { use http_client::wasm::WasmClient as DefaultClient; } else if #[cfg(feature = "h1-client")] { use http_client::h1::H1Client as DefaultClient; @@ -76,7 +76,12 @@ impl fmt::Debug for Client { } } -#[cfg(feature = "default-client")] +#[cfg(any( + feature = "curl-client", + all(feature = "wasm-client", target_arch = "wasm32"), + feature = "h1-client", + feature = "hyper-client" +))] impl Default for Client { fn default() -> Self { Self::new() @@ -97,14 +102,24 @@ impl Client { /// let res = client.send(req).await?; /// # Ok(()) } /// ``` - #[cfg(feature = "default-client")] + #[cfg(any( + feature = "curl-client", + all(feature = "wasm-client", target_arch = "wasm32"), + feature = "h1-client", + feature = "hyper-client" + ))] pub fn new() -> Self { Self::with_http_client(DefaultClient::new()) } pub(crate) fn new_shared_or_panic() -> Self { cfg_if! { - if #[cfg(feature = "default-client")] { + if #[cfg(any( + feature = "curl-client", + all(feature = "wasm-client", target_arch = "wasm32"), + feature = "h1-client", + feature = "hyper-client" + ))] { Self::new_shared() } else { panic!("default client not configured") @@ -140,7 +155,12 @@ impl Client { client } - #[cfg(feature = "default-client")] + #[cfg(any( + feature = "curl-client", + all(feature = "wasm-client", target_arch = "wasm32"), + feature = "h1-client", + feature = "hyper-client" + ))] pub(crate) fn new_shared() -> Self { cfg_if! { if #[cfg(any(feature = "curl-client", feature = "hyper-client"))] { diff --git a/src/lib.rs b/src/lib.rs index dc3505a2..17227d76 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -96,7 +96,12 @@ pub use request_builder::RequestBuilder; pub use response::{DecodeError, Response}; cfg_if::cfg_if! { - if #[cfg(feature = "default-client")] { + if #[cfg(any( + feature = "curl-client", + all(feature = "wasm-client", target_arch = "wasm32"), + feature = "h1-client", + feature = "hyper-client" + ))] { mod one_off; pub use one_off::{connect, delete, get, head, options, patch, post, put, trace};