From 27cd9bbcd6f1601378052b432306b6d78521aa3d Mon Sep 17 00:00:00 2001 From: Tobin Harding Date: Thu, 29 Jul 2021 09:39:36 +1000 Subject: [PATCH] Improve feature combinations for ureq/reqwest Our features are a bit convoluted, most annoyingly we cannot build with `--all-features`. However we can make life for users a little easier. Explicitly we want users to be able to: - Use async-interface/WASM without using esplora (to implement their own blockchain) - Use esplora in an ergonomic manner Currently using esplora requires either reqwest or ureq. Instead of making the user add all the features manually we can add features that add the required feature sets, this makes it easier for users to understand what is required and also makes usage easier. With this patch applied we can do - `cargo check --no-default-features --features=use-esplora-reqwest` - `cargo check --no-default-features --features=use-esplora-ureq` - `cargo check --features=use-esplora-ureq` - `cargo check --no-default-features --features=async-trait` --- .github/workflows/cont_integration.yml | 6 +++--- Cargo.toml | 13 ++++++++++--- src/lib.rs | 3 --- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/cont_integration.yml b/.github/workflows/cont_integration.yml index 35101517..aa03c865 100644 --- a/.github/workflows/cont_integration.yml +++ b/.github/workflows/cont_integration.yml @@ -16,7 +16,7 @@ jobs: - default - minimal - all-keys - - minimal,esplora,ureq + - minimal,use-esplora-ureq - key-value-db - electrum - compact_filters @@ -25,7 +25,7 @@ jobs: - rpc - verify - async-interface - - async-interface,esplora,reqwest + - use-esplora-reqwest steps: - name: checkout uses: actions/checkout@v2 @@ -139,7 +139,7 @@ jobs: - name: Update toolchain run: rustup update - name: Check - run: cargo check --target wasm32-unknown-unknown --features esplora,reqwest --no-default-features + run: cargo check --target wasm32-unknown-unknown --features use-esplora-reqwest --no-default-features fmt: diff --git a/Cargo.toml b/Cargo.toml index f8caafbf..fd3c5a91 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,13 +60,20 @@ rpc = ["bitcoincore-rpc"] # # - Users wanting asynchronous HTTP calls should enable `async-interface` to get # access to the asynchronous method implementations. Then, if Esplora is wanted, -# enable `esplora` AND `reqwest`. +# enable `esplora` AND `reqwest` (`--features=use-esplora-reqwest`). # - Users wanting blocking HTTP calls can use any of the other blockchain # implementations (`compact_filters`, `electrum`, or `esplora`). Users wanting to -# use Esplora should enable `esplora` AND `ureq`. +# use Esplora should enable `esplora` AND `ureq` (`--features=use-esplora-ureq`). +# +# WARNING: Please take care with the features below, various combinations will +# fail to build. We cannot currently build `bdk` with `--all-features`. async-interface = ["async-trait"] electrum = ["electrum-client"] -esplora = ["futures"] # Requires one of: `ureq` or `reqwest`. +# MUST ALSO USE `--no-default-features`. +use-esplora-reqwest = ["async-interface", "esplora", "reqwest", "futures"] +use-esplora-ureq = ["esplora", "ureq"] +# Typical configurations will not need to use `esplora` feature directly. +esplora = [] # Debug/Test features diff --git a/src/lib.rs b/src/lib.rs index 0d0c3e9c..0a7d61b3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -223,9 +223,6 @@ compile_error!( "Features async-interface and compact_filters are mutually exclusive and cannot be enabled together" ); -#[cfg(all(feature = "esplora", not(feature = "ureq"), not(feature = "reqwest")))] -compile_error!("Feature missing: esplora requires either ureq or reqwest to be enabled"); - #[cfg(feature = "keys-bip39")] extern crate bip39;