Skip to content

Commit c2e3ae0

Browse files
authored
Merge pull request #4100 from TheBlueMatt/2025-09-bp-no-consts
Add concrete `NO_*` consts to avoid users having to specify types
2 parents c05b90c + 0d59d73 commit c2e3ae0

File tree

1 file changed

+126
-0
lines changed
  • lightning-background-processor/src

1 file changed

+126
-0
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ use std::time::Instant;
8484

8585
#[cfg(not(feature = "std"))]
8686
use alloc::boxed::Box;
87+
#[cfg(all(not(c_bindings), not(feature = "std")))]
88+
use alloc::sync::Arc;
8789

8890
/// `BackgroundProcessor` takes care of tasks that (1) need to happen periodically to keep
8991
/// Rust-Lightning running properly, and (2) either can or should be run in the background. Its
@@ -331,6 +333,104 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
331333
true
332334
}
333335

336+
#[cfg(not(c_bindings))]
337+
type DynRouter = lightning::routing::router::DefaultRouter<
338+
&'static NetworkGraph<&'static dyn Logger>,
339+
&'static dyn Logger,
340+
&'static dyn EntropySource,
341+
&'static core::cell::RefCell<
342+
lightning::routing::scoring::ProbabilisticScorer<
343+
&'static NetworkGraph<&'static dyn Logger>,
344+
&'static dyn Logger,
345+
>,
346+
>,
347+
lightning::routing::scoring::ProbabilisticScoringFeeParameters,
348+
lightning::routing::scoring::ProbabilisticScorer<
349+
&'static NetworkGraph<&'static dyn Logger>,
350+
&'static dyn Logger,
351+
>,
352+
>;
353+
354+
#[cfg(not(c_bindings))]
355+
type DynMessageRouter = lightning::onion_message::messenger::DefaultMessageRouter<
356+
&'static NetworkGraph<&'static dyn Logger>,
357+
&'static dyn Logger,
358+
&'static dyn EntropySource,
359+
>;
360+
361+
#[cfg(all(not(c_bindings), not(taproot)))]
362+
type DynSignerProvider =
363+
dyn lightning::sign::SignerProvider<EcdsaSigner = lightning::sign::InMemorySigner>;
364+
365+
#[cfg(all(not(c_bindings), taproot))]
366+
type DynSignerProvider = dyn lightning::sign::SignerProvider<
367+
EcdsaSigner = lightning::sign::InMemorySigner,
368+
TaprootSigner = lightning::sign::InMemorySigner,
369+
>;
370+
371+
#[cfg(not(c_bindings))]
372+
type DynChannelManager = lightning::ln::channelmanager::ChannelManager<
373+
&'static dyn chain::Watch<lightning::sign::InMemorySigner>,
374+
&'static dyn BroadcasterInterface,
375+
&'static dyn EntropySource,
376+
&'static dyn lightning::sign::NodeSigner,
377+
&'static DynSignerProvider,
378+
&'static dyn FeeEstimator,
379+
&'static DynRouter,
380+
&'static DynMessageRouter,
381+
&'static dyn Logger,
382+
>;
383+
384+
/// When initializing a background processor without an onion messenger, this can be used to avoid
385+
/// specifying a concrete `OnionMessenger` type.
386+
#[cfg(not(c_bindings))]
387+
pub const NO_ONION_MESSENGER: Option<
388+
Arc<
389+
dyn AOnionMessenger<
390+
EntropySource = dyn EntropySource,
391+
ES = &dyn EntropySource,
392+
NodeSigner = dyn lightning::sign::NodeSigner,
393+
NS = &dyn lightning::sign::NodeSigner,
394+
Logger = dyn Logger,
395+
L = &'static dyn Logger,
396+
NodeIdLookUp = DynChannelManager,
397+
NL = &'static DynChannelManager,
398+
MessageRouter = DynMessageRouter,
399+
MR = &'static DynMessageRouter,
400+
OffersMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
401+
OMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
402+
AsyncPaymentsMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
403+
APH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
404+
DNSResolverMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
405+
DRH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
406+
CustomOnionMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
407+
CMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
408+
> + Send
409+
+ Sync,
410+
>,
411+
> = None;
412+
413+
/// When initializing a background processor without a liquidity manager, this can be used to avoid
414+
/// specifying a concrete `LiquidityManager` type.
415+
#[cfg(not(c_bindings))]
416+
pub const NO_LIQUIDITY_MANAGER: Option<
417+
Arc<
418+
dyn ALiquidityManager<
419+
EntropySource = dyn EntropySource,
420+
ES = &dyn EntropySource,
421+
NodeSigner = dyn lightning::sign::NodeSigner,
422+
NS = &dyn lightning::sign::NodeSigner,
423+
AChannelManager = DynChannelManager,
424+
CM = &DynChannelManager,
425+
Filter = dyn chain::Filter,
426+
C = &dyn chain::Filter,
427+
TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider,
428+
TP = &dyn lightning_liquidity::utils::time::TimeProvider,
429+
> + Send
430+
+ Sync,
431+
>,
432+
> = None;
433+
334434
pub(crate) mod futures_util {
335435
use core::future::Future;
336436
use core::marker::Unpin;
@@ -3384,4 +3484,30 @@ mod tests {
33843484
r1.unwrap().unwrap();
33853485
r2.unwrap()
33863486
}
3487+
3488+
#[test]
3489+
#[cfg(not(c_bindings))]
3490+
fn test_no_consts() {
3491+
// Compile-test the NO_* constants can be used.
3492+
let (_, nodes) = create_nodes(1, "test_no_consts");
3493+
let data_dir = nodes[0].kv_store.get_data_dir();
3494+
let persister = Arc::new(Persister::new(data_dir));
3495+
let bg_processor = BackgroundProcessor::start(
3496+
persister,
3497+
move |_: Event| Ok(()),
3498+
Arc::clone(&nodes[0].chain_monitor),
3499+
Arc::clone(&nodes[0].node),
3500+
crate::NO_ONION_MESSENGER,
3501+
nodes[0].no_gossip_sync(),
3502+
Arc::clone(&nodes[0].peer_manager),
3503+
crate::NO_LIQUIDITY_MANAGER,
3504+
Some(Arc::clone(&nodes[0].sweeper)),
3505+
Arc::clone(&nodes[0].logger),
3506+
Some(Arc::clone(&nodes[0].scorer)),
3507+
);
3508+
3509+
if !std::thread::panicking() {
3510+
bg_processor.stop().unwrap();
3511+
}
3512+
}
33873513
}

0 commit comments

Comments
 (0)