From 0cf6acad04dcc0133a839f3caea5d2beacaa9fec Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 3 Apr 2025 02:18:24 +0000 Subject: [PATCH 1/2] Import `alloc` types directly in `lightning-liquidity` While using a `prelude` can be helpful when we import `*` from it, importing individual types through a `prelude` is somewhat unnecessary indirection. Further, importing `alloc` types like `String` and `Vec` through a `prelude` confuse the bindings generator. Thus, here we drop the `alloc` imports from the `lightning-liquidity` `prelude` and replace it with direct imports. We leave the `lightning-liquidity::prelude::hash_tables` `pub(use)` in place as the sym-linked `debug_sync` relies on it. --- lightning-liquidity/src/events.rs | 4 +++- lightning-liquidity/src/lib.rs | 6 ------ lightning-liquidity/src/lsps0/event.rs | 3 ++- lightning-liquidity/src/lsps0/msgs.rs | 9 +++++---- lightning-liquidity/src/lsps0/ser.rs | 20 ++++++++++--------- lightning-liquidity/src/lsps0/service.rs | 3 ++- lightning-liquidity/src/lsps1/msgs.rs | 8 ++++---- lightning-liquidity/src/lsps1/service.rs | 7 +++++-- lightning-liquidity/src/lsps2/client.rs | 10 ++++++---- lightning-liquidity/src/lsps2/event.rs | 3 ++- lightning-liquidity/src/lsps2/msgs.rs | 4 +++- .../src/lsps2/payment_queue.rs | 3 ++- lightning-liquidity/src/lsps2/service.rs | 11 ++++++---- lightning-liquidity/src/manager.rs | 6 +++++- lightning-liquidity/src/message_queue.rs | 5 ++++- lightning-liquidity/src/tests/utils.rs | 3 ++- lightning-liquidity/src/utils.rs | 3 ++- 17 files changed, 65 insertions(+), 43 deletions(-) diff --git a/lightning-liquidity/src/events.rs b/lightning-liquidity/src/events.rs index a2c18417f9c..46308c7446c 100644 --- a/lightning-liquidity/src/events.rs +++ b/lightning-liquidity/src/events.rs @@ -18,9 +18,11 @@ use crate::lsps0; use crate::lsps1; use crate::lsps2; -use crate::prelude::{Vec, VecDeque}; use crate::sync::{Arc, Mutex}; +use alloc::collections::VecDeque; +use alloc::vec::Vec; + use core::future::Future; use core::task::{Poll, Waker}; diff --git a/lightning-liquidity/src/lib.rs b/lightning-liquidity/src/lib.rs index 3930efa51a2..909590eac96 100644 --- a/lightning-liquidity/src/lib.rs +++ b/lightning-liquidity/src/lib.rs @@ -52,12 +52,6 @@ extern crate alloc; mod prelude { - #![allow(unused_imports)] - pub use alloc::{boxed::Box, collections::VecDeque, string::String, vec, vec::Vec}; - - pub use alloc::borrow::ToOwned; - pub use alloc::string::ToString; - pub(crate) use lightning::util::hash_tables::*; } diff --git a/lightning-liquidity/src/lsps0/event.rs b/lightning-liquidity/src/lsps0/event.rs index 33fe1a8fa7f..97a3a950090 100644 --- a/lightning-liquidity/src/lsps0/event.rs +++ b/lightning-liquidity/src/lsps0/event.rs @@ -9,7 +9,8 @@ //! Contains bLIP-50 / LSPS0 event types. -use crate::prelude::Vec; +use alloc::vec::Vec; + use bitcoin::secp256k1::PublicKey; /// An event which an bLIP-50 / LSPS0 client may want to take some action in response to. diff --git a/lightning-liquidity/src/lsps0/msgs.rs b/lightning-liquidity/src/lsps0/msgs.rs index 91ec28ca119..24df03a1481 100644 --- a/lightning-liquidity/src/lsps0/msgs.rs +++ b/lightning-liquidity/src/lsps0/msgs.rs @@ -1,12 +1,12 @@ //! Message, request, and other primitive types used to implement LSPS0. +use alloc::vec::Vec; +use core::convert::TryFrom; + use crate::lsps0::ser::{LSPSMessage, LSPSRequestId, LSPSResponseError}; -use crate::prelude::Vec; use serde::{Deserialize, Serialize}; -use core::convert::TryFrom; - pub(crate) const LSPS0_LISTPROTOCOLS_METHOD_NAME: &str = "lsps0.list_protocols"; /// A `list_protocols` request. @@ -99,7 +99,8 @@ mod tests { use super::*; use crate::lsps0::ser::LSPSMethod; - use crate::prelude::ToString; + + use alloc::string::ToString; #[test] fn deserializes_request() { diff --git a/lightning-liquidity/src/lsps0/ser.rs b/lightning-liquidity/src/lsps0/ser.rs index af21b30a783..c916cf13e09 100644 --- a/lightning-liquidity/src/lsps0/ser.rs +++ b/lightning-liquidity/src/lsps0/ser.rs @@ -4,6 +4,11 @@ //! specification](https://github.com/lightning/blips/blob/master/blip-0050.md) for more //! information. +use alloc::string::String; + +use core::fmt::{self, Display}; +use core::str::FromStr; + use crate::lsps0::msgs::{ LSPS0ListProtocolsRequest, LSPS0Message, LSPS0Request, LSPS0Response, LSPS0_LISTPROTOCOLS_METHOD_NAME, @@ -16,7 +21,7 @@ use crate::lsps1::msgs::{ use crate::lsps2::msgs::{ LSPS2Message, LSPS2Request, LSPS2Response, LSPS2_BUY_METHOD_NAME, LSPS2_GET_INFO_METHOD_NAME, }; -use crate::prelude::{HashMap, String}; +use crate::prelude::HashMap; use lightning::ln::msgs::{DecodeError, LightningError}; use lightning::ln::wire; @@ -24,9 +29,6 @@ use lightning::util::ser::{LengthLimitedRead, LengthReadable, WithoutLength}; use bitcoin::secp256k1::PublicKey; -use core::fmt::{self, Display}; -use core::str::FromStr; - #[cfg(feature = "std")] use std::time::{SystemTime, UNIX_EPOCH}; @@ -625,7 +627,7 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> { } pub(crate) mod string_amount { - use crate::prelude::{String, ToString}; + use alloc::string::{String, ToString}; use core::str::FromStr; use serde::de::Unexpected; use serde::{Deserialize, Deserializer, Serializer}; @@ -650,7 +652,7 @@ pub(crate) mod string_amount { } pub(crate) mod string_amount_option { - use crate::prelude::{String, ToString}; + use alloc::string::{String, ToString}; use core::str::FromStr; use serde::de::Unexpected; use serde::{Deserialize, Deserializer, Serialize, Serializer}; @@ -679,7 +681,7 @@ pub(crate) mod string_amount_option { } pub(crate) mod string_offer { - use crate::prelude::{String, ToString}; + use alloc::string::{String, ToString}; use core::str::FromStr; use lightning::offers::offer::Offer; use serde::de::Unexpected; @@ -705,7 +707,7 @@ pub(crate) mod string_offer { } pub(crate) mod unchecked_address { - use crate::prelude::{String, ToString}; + use alloc::string::{String, ToString}; use bitcoin::Address; use core::str::FromStr; use serde::de::Unexpected; @@ -732,7 +734,7 @@ pub(crate) mod unchecked_address { } pub(crate) mod unchecked_address_option { - use crate::prelude::{String, ToString}; + use alloc::string::{String, ToString}; use bitcoin::Address; use core::str::FromStr; use serde::de::Unexpected; diff --git a/lightning-liquidity/src/lsps0/service.rs b/lightning-liquidity/src/lsps0/service.rs index 189a2cd0917..be9549e7519 100644 --- a/lightning-liquidity/src/lsps0/service.rs +++ b/lightning-liquidity/src/lsps0/service.rs @@ -13,10 +13,11 @@ //! specifcation](https://github.com/lightning/blips/blob/master/blip-0050.md) for more //! information. +use alloc::vec::Vec; + use crate::lsps0::msgs::{LSPS0ListProtocolsResponse, LSPS0Message, LSPS0Request, LSPS0Response}; use crate::lsps0::ser::{LSPSProtocolMessageHandler, LSPSRequestId}; use crate::message_queue::MessageQueue; -use crate::prelude::Vec; use crate::sync::Arc; use lightning::ln::msgs::{ErrorAction, LightningError}; diff --git a/lightning-liquidity/src/lsps1/msgs.rs b/lightning-liquidity/src/lsps1/msgs.rs index 0d9a6cec256..9b9b94d7cd2 100644 --- a/lightning-liquidity/src/lsps1/msgs.rs +++ b/lightning-liquidity/src/lsps1/msgs.rs @@ -1,12 +1,14 @@ //! Message, request, and other primitive types used to implement bLIP-51 / LSPS1. +use alloc::string::String; + +use core::convert::TryFrom; + use crate::lsps0::ser::{ string_amount, string_offer, u32_fee_rate, unchecked_address, unchecked_address_option, LSPSDateTime, LSPSMessage, LSPSRequestId, LSPSResponseError, }; -use crate::prelude::String; - use bitcoin::{Address, FeeRate, OutPoint}; use lightning::offers::offer::Offer; @@ -14,8 +16,6 @@ use lightning_invoice::Bolt11Invoice; use serde::{Deserialize, Serialize}; -use core::convert::TryFrom; - pub(crate) const LSPS1_GET_INFO_METHOD_NAME: &str = "lsps1.get_info"; pub(crate) const LSPS1_CREATE_ORDER_METHOD_NAME: &str = "lsps1.create_order"; pub(crate) const LSPS1_GET_ORDER_METHOD_NAME: &str = "lsps1.get_order"; diff --git a/lightning-liquidity/src/lsps1/service.rs b/lightning-liquidity/src/lsps1/service.rs index 745bec7d844..4b1cdcbf287 100644 --- a/lightning-liquidity/src/lsps1/service.rs +++ b/lightning-liquidity/src/lsps1/service.rs @@ -9,6 +9,10 @@ //! Contains the main bLIP-51 / LSPS1 server object, [`LSPS1ServiceHandler`]. +use alloc::string::String; + +use core::ops::Deref; + use super::event::LSPS1ServiceEvent; use super::msgs::{ LSPS1ChannelInfo, LSPS1CreateOrderRequest, LSPS1CreateOrderResponse, LSPS1GetInfoResponse, @@ -22,7 +26,7 @@ use crate::events::EventQueue; use crate::lsps0::ser::{ LSPSDateTime, LSPSProtocolMessageHandler, LSPSRequestId, LSPSResponseError, }; -use crate::prelude::{new_hash_map, HashMap, String}; +use crate::prelude::{new_hash_map, HashMap}; use crate::sync::{Arc, Mutex, RwLock}; use crate::utils; @@ -36,7 +40,6 @@ use lightning::util::logger::Level; use bitcoin::secp256k1::PublicKey; use chrono::Utc; -use core::ops::Deref; /// Server-side configuration options for bLIP-51 / LSPS1 channel requests. #[derive(Clone, Debug)] diff --git a/lightning-liquidity/src/lsps2/client.rs b/lightning-liquidity/src/lsps2/client.rs index 47c2b0da692..6dc0d5350b6 100644 --- a/lightning-liquidity/src/lsps2/client.rs +++ b/lightning-liquidity/src/lsps2/client.rs @@ -8,11 +8,16 @@ //! Contains the main bLIP-52 / LSPS2 client object, [`LSPS2ClientHandler`]. +use alloc::string::{String, ToString}; + +use core::default::Default; +use core::ops::Deref; + use crate::events::EventQueue; use crate::lsps0::ser::{LSPSProtocolMessageHandler, LSPSRequestId, LSPSResponseError}; use crate::lsps2::event::LSPS2ClientEvent; use crate::message_queue::MessageQueue; -use crate::prelude::{new_hash_map, new_hash_set, HashMap, HashSet, String, ToString}; +use crate::prelude::{new_hash_map, new_hash_set, HashMap, HashSet}; use crate::sync::{Arc, Mutex, RwLock}; use lightning::ln::msgs::{ErrorAction, LightningError}; @@ -22,9 +27,6 @@ use lightning::util::logger::Level; use bitcoin::secp256k1::PublicKey; -use core::default::Default; -use core::ops::Deref; - use crate::lsps2::msgs::{ LSPS2BuyRequest, LSPS2BuyResponse, LSPS2GetInfoRequest, LSPS2GetInfoResponse, LSPS2Message, LSPS2OpeningFeeParams, LSPS2Request, LSPS2Response, diff --git a/lightning-liquidity/src/lsps2/event.rs b/lightning-liquidity/src/lsps2/event.rs index 6ae09a417b7..f20a74e199a 100644 --- a/lightning-liquidity/src/lsps2/event.rs +++ b/lightning-liquidity/src/lsps2/event.rs @@ -11,7 +11,8 @@ use super::msgs::LSPS2OpeningFeeParams; use crate::lsps0::ser::LSPSRequestId; -use crate::prelude::{String, Vec}; +use alloc::string::String; +use alloc::vec::Vec; use bitcoin::secp256k1::PublicKey; diff --git a/lightning-liquidity/src/lsps2/msgs.rs b/lightning-liquidity/src/lsps2/msgs.rs index 9812f4d7338..84875d4ab7c 100644 --- a/lightning-liquidity/src/lsps2/msgs.rs +++ b/lightning-liquidity/src/lsps2/msgs.rs @@ -1,5 +1,8 @@ //! Message, request, and other primitive types used to implement bLIP-52 / LSPS2. +use alloc::string::String; +use alloc::vec::Vec; + use core::convert::TryFrom; use bitcoin::hashes::hmac::{Hmac, HmacEngine}; @@ -13,7 +16,6 @@ use crate::lsps0::ser::{ string_amount, string_amount_option, LSPSDateTime, LSPSMessage, LSPSRequestId, LSPSResponseError, }; -use crate::prelude::{String, Vec}; use crate::utils; pub(crate) const LSPS2_GET_INFO_METHOD_NAME: &str = "lsps2.get_info"; diff --git a/lightning-liquidity/src/lsps2/payment_queue.rs b/lightning-liquidity/src/lsps2/payment_queue.rs index 1ad3164df36..d956dfc9d81 100644 --- a/lightning-liquidity/src/lsps2/payment_queue.rs +++ b/lightning-liquidity/src/lsps2/payment_queue.rs @@ -1,4 +1,5 @@ -use crate::prelude::Vec; +use alloc::vec::Vec; + use lightning::ln::channelmanager::InterceptId; use lightning_types::payment::PaymentHash; diff --git a/lightning-liquidity/src/lsps2/service.rs b/lightning-liquidity/src/lsps2/service.rs index 9929ac3eed3..ebdeffbff64 100644 --- a/lightning-liquidity/src/lsps2/service.rs +++ b/lightning-liquidity/src/lsps2/service.rs @@ -9,6 +9,12 @@ //! Contains the main bLIP-52 / LSPS2 server-side object, [`LSPS2ServiceHandler`]. +use alloc::string::{String, ToString}; +use alloc::vec::Vec; + +use core::ops::Deref; +use core::sync::atomic::{AtomicUsize, Ordering}; + use crate::events::EventQueue; use crate::lsps0::ser::{ LSPSMessage, LSPSProtocolMessageHandler, LSPSRequestId, LSPSResponseError, @@ -22,7 +28,7 @@ use crate::lsps2::utils::{ }; use crate::message_queue::MessageQueue; use crate::prelude::hash_map::Entry; -use crate::prelude::{new_hash_map, HashMap, String, ToString, Vec}; +use crate::prelude::{new_hash_map, HashMap}; use crate::sync::{Arc, Mutex, MutexGuard, RwLock}; use lightning::events::HTLCDestination; @@ -36,9 +42,6 @@ use lightning_types::payment::PaymentHash; use bitcoin::secp256k1::PublicKey; -use core::ops::Deref; -use core::sync::atomic::{AtomicUsize, Ordering}; - use crate::lsps2::msgs::{ LSPS2BuyRequest, LSPS2BuyResponse, LSPS2GetInfoRequest, LSPS2GetInfoResponse, LSPS2Message, LSPS2OpeningFeeParams, LSPS2RawOpeningFeeParams, LSPS2Request, LSPS2Response, diff --git a/lightning-liquidity/src/manager.rs b/lightning-liquidity/src/manager.rs index 63726cc1f77..eec9a71d632 100644 --- a/lightning-liquidity/src/manager.rs +++ b/lightning-liquidity/src/manager.rs @@ -1,3 +1,7 @@ +use alloc::boxed::Box; +use alloc::string::ToString; +use alloc::vec::Vec; + use crate::events::{EventQueue, LiquidityEvent}; use crate::lsps0::client::LSPS0ClientHandler; use crate::lsps0::msgs::LSPS0Message; @@ -17,7 +21,7 @@ use crate::lsps1::service::{LSPS1ServiceConfig, LSPS1ServiceHandler}; use crate::lsps2::client::{LSPS2ClientConfig, LSPS2ClientHandler}; use crate::lsps2::msgs::LSPS2Message; use crate::lsps2::service::{LSPS2ServiceConfig, LSPS2ServiceHandler}; -use crate::prelude::{new_hash_map, new_hash_set, Box, HashMap, HashSet, ToString, Vec}; +use crate::prelude::{new_hash_map, new_hash_set, HashMap, HashSet}; use crate::sync::{Arc, Mutex, RwLock}; use lightning::chain::{self, BestBlock, Confirm, Filter, Listen}; diff --git a/lightning-liquidity/src/message_queue.rs b/lightning-liquidity/src/message_queue.rs index 7b61a87bcd4..49a98ecfa68 100644 --- a/lightning-liquidity/src/message_queue.rs +++ b/lightning-liquidity/src/message_queue.rs @@ -1,7 +1,10 @@ //! Holds types and traits used to implement message queues for [`LSPSMessage`]s. +use alloc::boxed::Box; +use alloc::collections::VecDeque; +use alloc::vec::Vec; + use crate::lsps0::ser::LSPSMessage; -use crate::prelude::{Box, Vec, VecDeque}; use crate::sync::{Mutex, RwLock}; use bitcoin::secp256k1::PublicKey; diff --git a/lightning-liquidity/src/tests/utils.rs b/lightning-liquidity/src/tests/utils.rs index af5e55ae26b..204873ed11a 100644 --- a/lightning-liquidity/src/tests/utils.rs +++ b/lightning-liquidity/src/tests/utils.rs @@ -1,4 +1,5 @@ -use crate::prelude::Vec; +use alloc::vec::Vec; + use bitcoin::secp256k1::PublicKey; use lightning::io; use lightning::sign::EntropySource; diff --git a/lightning-liquidity/src/utils.rs b/lightning-liquidity/src/utils.rs index 8f961e72632..ab4c242d6f0 100644 --- a/lightning-liquidity/src/utils.rs +++ b/lightning-liquidity/src/utils.rs @@ -1,8 +1,9 @@ +use alloc::string::String; use core::{fmt::Write, ops::Deref}; + use lightning::sign::EntropySource; use crate::lsps0::ser::LSPSRequestId; -use crate::prelude::String; pub fn scid_from_human_readable_string(human_readable_scid: &str) -> Result { let mut parts = human_readable_scid.split('x'); From c3a1ffb7175c0e2fc6bfa37bdc966af003934721 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 3 Apr 2025 00:54:37 +0000 Subject: [PATCH 2/2] Don't req a clone-able `ChannelManager` in `LSPS2ServiceHandler` `LSPS2ServiceHandler` currently requires that the `Deref` to a `ChannelManager` be `Clone`, but doesn't use it for anything. This upsets the bindings somewhat as they generate a wrapper struct which implements `Deref` (as it holds a pointer) but does not implement `Clone` (as the inner object cannot be cloned. Thus, we simply remove the additional bound here. --- lightning-liquidity/src/lsps2/service.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lightning-liquidity/src/lsps2/service.rs b/lightning-liquidity/src/lsps2/service.rs index ebdeffbff64..9b511ad8d44 100644 --- a/lightning-liquidity/src/lsps2/service.rs +++ b/lightning-liquidity/src/lsps2/service.rs @@ -554,7 +554,7 @@ macro_rules! get_or_insert_peer_state_entry { } /// The main object allowing to send and receive bLIP-52 / LSPS2 messages. -pub struct LSPS2ServiceHandler +pub struct LSPS2ServiceHandler where CM::Target: AChannelManager, { @@ -568,7 +568,7 @@ where config: LSPS2ServiceConfig, } -impl LSPS2ServiceHandler +impl LSPS2ServiceHandler where CM::Target: AChannelManager, { @@ -1355,7 +1355,7 @@ where } } -impl LSPSProtocolMessageHandler for LSPS2ServiceHandler +impl LSPSProtocolMessageHandler for LSPS2ServiceHandler where CM::Target: AChannelManager, {