Drop `futures` dependency from `lightning-block-sync`
authorMatt Corallo <git@bluematt.me>
Thu, 30 Mar 2023 18:33:04 +0000 (18:33 +0000)
committerMatt Corallo <git@bluematt.me>
Thu, 30 Mar 2023 18:56:27 +0000 (18:56 +0000)
Some how I'd understood that `futures` had reasonable MSRV
guarantees (e.g. at least Debian stable), but apparently that isn't
actually the case, as they bumped it to upgrade to syn (with
apparently no actual features or bugfixes added as a result?) with
no minor version bump or any available alternative (unlike Tokio,
which does LTS releases).

Luckily its relatively easy to just drop the `futures` dependency -
it means a new connection for each request, which is annoying, but
certainly not the end of the world, and its easier than trying to
deal with pinning `futures`.

See https://github.com/rust-lang/futures-rs/pull/2733

lightning-block-sync/Cargo.toml
lightning-block-sync/src/rest.rs
lightning-block-sync/src/rpc.rs

index 9d42968d866bc8edfe9cf27b87fc3afa7a8907b7..59f8c2356057c32cd7ec01bf251569e230b82d72 100644 (file)
@@ -20,7 +20,6 @@ rpc-client = [ "serde_json", "chunked_transfer" ]
 [dependencies]
 bitcoin = "0.29.0"
 lightning = { version = "0.0.114", path = "../lightning" }
-futures-util = { version = "0.3" }
 tokio = { version = "1.0", features = [ "io-util", "net", "time" ], optional = true }
 serde_json = { version = "1.0", optional = true }
 chunked_transfer = { version = "1.4", optional = true }
index c73b23b600c2925e3e0a085a99fc75560527f064..c2926b7a0f766fdc975614735f025d80c05e5e9f 100644 (file)
@@ -7,15 +7,12 @@ use crate::http::{BinaryResponse, HttpEndpoint, HttpClient, JsonResponse};
 use bitcoin::hash_types::BlockHash;
 use bitcoin::hashes::hex::ToHex;
 
-use futures_util::lock::Mutex;
-
 use std::convert::TryFrom;
 use std::convert::TryInto;
 
 /// A simple REST client for requesting resources using HTTP `GET`.
 pub struct RestClient {
        endpoint: HttpEndpoint,
-       client: Mutex<HttpClient>,
 }
 
 impl RestClient {
@@ -23,8 +20,7 @@ impl RestClient {
        ///
        /// The endpoint should contain the REST path component (e.g., http://127.0.0.1:8332/rest).
        pub fn new(endpoint: HttpEndpoint) -> std::io::Result<Self> {
-               let client = Mutex::new(HttpClient::connect(&endpoint)?);
-               Ok(Self { endpoint, client })
+               Ok(Self { endpoint })
        }
 
        /// Requests a resource encoded in `F` format and interpreted as type `T`.
@@ -32,7 +28,8 @@ impl RestClient {
        where F: TryFrom<Vec<u8>, Error = std::io::Error> + TryInto<T, Error = std::io::Error> {
                let host = format!("{}:{}", self.endpoint.host(), self.endpoint.port());
                let uri = format!("{}/{}", self.endpoint.path().trim_end_matches("/"), resource_path);
-               self.client.lock().await.get::<F>(&uri, &host).await?.try_into()
+               let mut client = HttpClient::connect(&self.endpoint)?;
+               client.get::<F>(&uri, &host).await?.try_into()
        }
 }
 
index e1dc43c8f28d65511c45ce32591ef9eb5b933e8b..521d94f3d1441a42e07498513c6aadde1a8a1e1c 100644 (file)
@@ -7,8 +7,6 @@ use crate::http::{HttpClient, HttpEndpoint, HttpError, JsonResponse};
 use bitcoin::hash_types::BlockHash;
 use bitcoin::hashes::hex::ToHex;
 
-use futures_util::lock::Mutex;
-
 use serde_json;
 
 use std::convert::TryFrom;
@@ -41,7 +39,6 @@ impl Error for RpcError {}
 pub struct RpcClient {
        basic_auth: String,
        endpoint: HttpEndpoint,
-       client: Mutex<HttpClient>,
        id: AtomicUsize,
 }
 
@@ -50,11 +47,9 @@ impl RpcClient {
        /// credentials should be a base64 encoding of a user name and password joined by a colon, as is
        /// required for HTTP basic access authentication.
        pub fn new(credentials: &str, endpoint: HttpEndpoint) -> std::io::Result<Self> {
-               let client = Mutex::new(HttpClient::connect(&endpoint)?);
                Ok(Self {
                        basic_auth: "Basic ".to_string() + credentials,
                        endpoint,
-                       client,
                        id: AtomicUsize::new(0),
                })
        }
@@ -73,7 +68,8 @@ impl RpcClient {
                        "id": &self.id.fetch_add(1, Ordering::AcqRel).to_string()
                });
 
-               let mut response = match self.client.lock().await.post::<JsonResponse>(&uri, &host, &self.basic_auth, content).await {
+               let mut client = HttpClient::connect(&self.endpoint)?;
+               let mut response = match client.post::<JsonResponse>(&uri, &host, &self.basic_auth, content).await {
                        Ok(JsonResponse(response)) => response,
                        Err(e) if e.kind() == std::io::ErrorKind::Other => {
                                match e.get_ref().unwrap().downcast_ref::<HttpError>() {