@@ -854,14 +854,24 @@ where
854854 event_handler ( event) . await
855855 } )
856856 } ;
857+ // We should extract these out of config because the macro expects individual arguments
858+ let persister = config. persister ;
859+ let chain_monitor = config. chain_monitor ;
860+ let channel_manager = config. channel_manager ;
861+ let onion_messenger = config. onion_messenger ;
862+ let peer_manager = config. peer_manager ;
863+ let gossip_sync = config. gossip_sync ;
864+ let logger = config. logger ;
865+ let scorer = config. scorer ;
866+
857867 define_run_body ! (
858- config . persister,
859- config . chain_monitor,
860- config . chain_monitor. process_pending_events_async( async_event_handler) . await ,
861- config . channel_manager,
862- config . channel_manager. get_cm( ) . process_pending_events_async( async_event_handler) . await ,
863- config . onion_messenger,
864- if let Some ( om) = & config . onion_messenger {
868+ persister,
869+ chain_monitor,
870+ chain_monitor. process_pending_events_async( async_event_handler) . await ,
871+ channel_manager,
872+ channel_manager. get_cm( ) . process_pending_events_async( async_event_handler) . await ,
873+ onion_messenger,
874+ if let Some ( om) = & onion_messenger {
865875 om. get_om( ) . process_pending_events_async( async_event_handler) . await
866876 } ,
867877 peer_manager,
@@ -875,7 +885,7 @@ where
875885 scorer,
876886 should_break,
877887 {
878- let om_fut = if let Some ( om) = config . onion_messenger. as_ref( ) {
888+ let om_fut = if let Some ( om) = onion_messenger. as_ref( ) {
879889 let fut = om. get_om( ) . get_update_future( ) ;
880890 OptionalSelector { optional_future: Some ( fut) }
881891 } else {
@@ -888,8 +898,8 @@ where
888898 OptionalSelector { optional_future: None }
889899 } ;
890900 let fut = Selector {
891- a: config . channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
892- b: config . chain_monitor. get_update_future( ) ,
901+ a: channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
902+ b: chain_monitor. get_update_future( ) ,
893903 c: om_fut,
894904 d: lm_fut,
895905 e: sleeper( if mobile_interruptable_platform {
@@ -1108,18 +1118,18 @@ impl BackgroundProcessor {
11081118 /// # Example
11091119 /// ```
11101120 /// # use lightning_background_processor::*;
1111- /// let config = BackgroundProcessorConfigBuilder::new(
1121+ /// let mut builder = BackgroundProcessorConfigBuilder::new(
11121122 /// persister,
11131123 /// event_handler,
11141124 /// chain_monitor,
11151125 /// channel_manager,
11161126 /// gossip_sync,
11171127 /// peer_manager,
11181128 /// logger
1119- /// )
1120- /// .with_onion_messenger(messenger)
1121- /// .with_scorer(scorer)
1122- /// .build();
1129+ /// );
1130+ /// builder .with_onion_messenger(messenger);
1131+ /// .with_scorer(scorer);
1132+ /// let config = builder .build();
11231133 /// let bg_processor = BackgroundProcessor::from_config(config);
11241134 /// ```
11251135 pub fn from_config <
@@ -1258,18 +1268,18 @@ impl BackgroundProcessor {
12581268/// # Example
12591269/// ```
12601270/// # use lightning_background_processor::*;
1261- /// let config = BackgroundProcessorConfigBuilder::new(
1271+ /// let mut builder = BackgroundProcessorConfigBuilder::new(
12621272/// persister,
12631273/// event_handler,
12641274/// chain_monitor,
12651275/// channel_manager,
12661276/// gossip_sync,
12671277/// peer_manager,
12681278/// logger
1269- /// )
1270- /// .with_onion_messenger(messenger) // Optional
1271- /// .with_scorer(scorer) // Optional
1272- /// .build();
1279+ /// );
1280+ /// builder .with_onion_messenger(messenger); // Optional
1281+ /// .with_scorer(scorer); // Optional
1282+ /// let config = builder .build();
12731283///
12741284/// // Use with BackgroundProcessor
12751285/// let processor = BackgroundProcessor::from_config(config);
@@ -1281,7 +1291,7 @@ impl BackgroundProcessor {
12811291/// process_events_async(config, sleeper, mobile_interruptable_platform, fetch_time).await?;"
12821292) ]
12831293/// ```
1284- #[ cfg( feature = "std" ) ]
1294+ #[ cfg( any ( feature = "std" , feature = "futures" ) ) ]
12851295pub struct BackgroundProcessorConfig <
12861296 ' a ,
12871297 UL : ' static + Deref + Send + Sync ,
@@ -1291,7 +1301,8 @@ pub struct BackgroundProcessorConfig<
12911301 G : ' static + Deref < Target = NetworkGraph < L > > + Send + Sync ,
12921302 L : ' static + Deref + Send + Sync ,
12931303 P : ' static + Deref + Send + Sync ,
1294- EH : ' static + EventHandler + Send ,
1304+ #[ cfg( feature = "std" ) ] EH : ' static + EventHandler + Send ,
1305+ #[ cfg( feature = "futures" ) ] EH : ' static + Fn ( Event ) -> core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
12951306 PS : ' static + Deref + Send ,
12961307 M : ' static
12971308 + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P > >
@@ -1418,7 +1429,7 @@ where
14181429 PM :: Target : APeerManager + Send + Sync ,
14191430{
14201431 /// Creates a new builder instance.
1421- pub ( crate ) fn new (
1432+ pub fn new (
14221433 persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
14231434 gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM , logger : L ,
14241435 ) -> Self {
@@ -1477,7 +1488,9 @@ impl Drop for BackgroundProcessor {
14771488
14781489#[ cfg( all( feature = "std" , test) ) ]
14791490mod tests {
1480- use super :: { BackgroundProcessor , GossipSync , FRESHNESS_TIMER } ;
1491+ use super :: {
1492+ BackgroundProcessor , BackgroundProcessorConfigBuilder , GossipSync , FRESHNESS_TIMER ,
1493+ } ;
14811494 use bitcoin:: constants:: { genesis_block, ChainHash } ;
14821495 use bitcoin:: hashes:: Hash ;
14831496 use bitcoin:: locktime:: absolute:: LockTime ;
@@ -2429,7 +2442,7 @@ mod tests {
24292442 Persister :: new ( data_dir) . with_manager_error ( std:: io:: ErrorKind :: Other , "test" ) ,
24302443 ) ;
24312444
2432- let config = BackgroundProcessorConfigBuilder :: new (
2445+ let mut builder = BackgroundProcessorConfigBuilder :: new (
24332446 persister,
24342447 |_: _ | async { Ok ( ( ) ) } ,
24352448 nodes[ 0 ] . chain_monitor . clone ( ) ,
@@ -2439,10 +2452,11 @@ mod tests {
24392452 Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
24402453 Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) ) ,
24412454 nodes[ 0 ] . logger . clone ( ) ,
2442- )
2443- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2444- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
2445- . build ( ) ;
2455+ ) ;
2456+ builder
2457+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2458+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
2459+ let config = builder. build ( ) ;
24462460
24472461 let bp_future = super :: process_events_async (
24482462 config,
@@ -2940,7 +2954,7 @@ mod tests {
29402954 let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
29412955 let persister = Arc :: new ( Persister :: new ( data_dir) . with_graph_persistence_notifier ( sender) ) ;
29422956
2943- let config = BackgroundProcessorConfigBuilder :: new (
2957+ let mut builder = BackgroundProcessorConfigBuilder :: new (
29442958 persister,
29452959 |_: _ | async { Ok ( ( ) ) } ,
29462960 nodes[ 0 ] . chain_monitor . clone ( ) ,
@@ -2950,10 +2964,11 @@ mod tests {
29502964 Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
29512965 Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) ) ,
29522966 nodes[ 0 ] . logger . clone ( ) ,
2953- )
2954- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2955- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
2956- . build ( ) ;
2967+ ) ;
2968+ builder
2969+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2970+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
2971+ let config = builder. build ( ) ;
29572972
29582973 let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
29592974 let bp_future = super :: process_events_async (
@@ -3161,7 +3176,7 @@ mod tests {
31613176
31623177 let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
31633178
3164- let config = BackgroundProcessorConfigBuilder :: new (
3179+ let mut builder = BackgroundProcessorConfigBuilder :: new (
31653180 persister,
31663181 event_handler,
31673182 nodes[ 0 ] . chain_monitor . clone ( ) ,
@@ -3171,10 +3186,11 @@ mod tests {
31713186 Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
31723187 Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) ) ,
31733188 nodes[ 0 ] . logger . clone ( ) ,
3174- )
3175- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3176- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
3177- . build ( ) ;
3189+ ) ;
3190+ builder
3191+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3192+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
3193+ let config = builder. build ( ) ;
31783194
31793195 let bp_future = super :: process_events_async (
31803196 config,
@@ -3209,11 +3225,11 @@ mod tests {
32093225 }
32103226
32113227 #[ test]
3212- fn test_background_processor_builder ( ) {
3228+ fn test_background_processor_config_builder ( ) {
32133229 // Test that when a new channel is created, the ChannelManager needs to be re-persisted with
32143230 // updates. Also test that when new updates are available, the manager signals that it needs
32153231 // re-persistence and is successfully re-persisted.
3216- let ( persist_dir, nodes) = create_nodes ( 2 , "test_background_processor_builder " ) ;
3232+ let ( persist_dir, nodes) = create_nodes ( 2 , "test_background_processor_config_builder " ) ;
32173233
32183234 // Go through the channel creation process so that each node has something to persist. Since
32193235 // open_channel consumes events, it must complete before starting BackgroundProcessor to
@@ -3224,18 +3240,19 @@ mod tests {
32243240 let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
32253241 let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
32263242 let event_handler = |_: _ | Ok ( ( ) ) ;
3227- let config = BackgroundProcessorConfigBuilder :: new (
3243+ let mut builder = BackgroundProcessorConfigBuilder :: new (
32283244 persister,
32293245 event_handler,
32303246 nodes[ 0 ] . chain_monitor . clone ( ) ,
32313247 nodes[ 0 ] . node . clone ( ) ,
32323248 nodes[ 0 ] . p2p_gossip_sync ( ) ,
32333249 nodes[ 0 ] . peer_manager . clone ( ) ,
32343250 nodes[ 0 ] . logger . clone ( ) ,
3235- )
3236- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3237- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
3238- . build ( ) ;
3251+ ) ;
3252+ builder
3253+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3254+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
3255+ let config = builder. build ( ) ;
32393256
32403257 let bg_processor = BackgroundProcessor :: from_config ( config) ;
32413258
@@ -3287,7 +3304,7 @@ mod tests {
32873304 . unwrap ( ) ;
32883305
32893306 // Check that the force-close updates are persisted
3290- check_persisted_data ! ( nodes[ 0 ] . node, manager_path . clone( ) ) ;
3307+ check_persisted_data ! ( nodes[ 0 ] . node, filepath . clone( ) ) ;
32913308 loop {
32923309 if !nodes[ 0 ] . node . get_event_or_persist_condvar_value ( ) {
32933310 break ;
@@ -3297,7 +3314,7 @@ mod tests {
32973314 // Check network graph is persisted
32983315 let filepath =
32993316 get_full_filepath ( format ! ( "{}_persister_0" , & persist_dir) , "network_graph" . to_string ( ) ) ;
3300- check_persisted_data ! ( nodes[ 0 ] . network_graph, filepath) ;
3317+ check_persisted_data ! ( nodes[ 0 ] . network_graph, filepath. clone ( ) ) ;
33013318
33023319 // Check scorer is persisted
33033320 let filepath =
0 commit comments