@@ -763,7 +763,7 @@ pub async fn process_events_async<
763763 G ,
764764 L ,
765765 P ,
766- EH ,
766+ EventHandler ,
767767 PS ,
768768 M ,
769769 CM ,
@@ -818,31 +818,41 @@ where
818818 event_handler ( event) . await
819819 } )
820820 } ;
821+ // We should extract these out of config because the macro expects individual arguments
822+ let persister = config. persister ;
823+ let chain_monitor = config. chain_monitor ;
824+ let channel_manager = config. channel_manager ;
825+ let onion_messenger = config. onion_messenger ;
826+ let peer_manager = config. peer_manager ;
827+ let gossip_sync = config. gossip_sync ;
828+ let logger = config. logger ;
829+ let scorer = config. scorer ;
830+
821831 define_run_body ! (
822- config . persister,
823- config . chain_monitor,
824- config . chain_monitor. process_pending_events_async( async_event_handler) . await ,
825- config . channel_manager,
826- config . channel_manager. get_cm( ) . process_pending_events_async( async_event_handler) . await ,
827- config . onion_messenger,
828- if let Some ( om) = & config . onion_messenger {
832+ persister,
833+ chain_monitor,
834+ chain_monitor. process_pending_events_async( async_event_handler) . await ,
835+ channel_manager,
836+ channel_manager. get_cm( ) . process_pending_events_async( async_event_handler) . await ,
837+ onion_messenger,
838+ if let Some ( om) = & onion_messenger {
829839 om. get_om( ) . process_pending_events_async( async_event_handler) . await
830840 } ,
831- config . peer_manager,
832- config . gossip_sync,
833- config . logger,
834- config . scorer,
841+ peer_manager,
842+ gossip_sync,
843+ logger,
844+ scorer,
835845 should_break,
836846 {
837- let om_fut = if let Some ( om) = config . onion_messenger. as_ref( ) {
847+ let om_fut = if let Some ( om) = onion_messenger. as_ref( ) {
838848 let fut = om. get_om( ) . get_update_future( ) ;
839849 OptionalSelector { optional_future: Some ( fut) }
840850 } else {
841851 OptionalSelector { optional_future: None }
842852 } ;
843853 let fut = Selector {
844- a: config . channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
845- b: config . chain_monitor. get_update_future( ) ,
854+ a: channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
855+ b: chain_monitor. get_update_future( ) ,
846856 c: om_fut,
847857 d: sleeper( if mobile_interruptable_platform {
848858 Duration :: from_millis( 100 )
@@ -1036,18 +1046,18 @@ impl BackgroundProcessor {
10361046 /// # Example
10371047 /// ```
10381048 /// # use lightning_background_processor::*;
1039- /// let config = BackgroundProcessorConfigBuilder::new(
1049+ /// let mut builder = BackgroundProcessorConfigBuilder::new(
10401050 /// persister,
10411051 /// event_handler,
10421052 /// chain_monitor,
10431053 /// channel_manager,
10441054 /// gossip_sync,
10451055 /// peer_manager,
10461056 /// logger
1047- /// )
1048- /// .with_onion_messenger(messenger)
1049- /// .with_scorer(scorer)
1050- /// .build();
1057+ /// );
1058+ /// builder .with_onion_messenger(messenger);
1059+ /// .with_scorer(scorer);
1060+ /// let config = builder .build();
10511061 /// let bg_processor = BackgroundProcessor::from_config(config);
10521062 /// ```
10531063 pub fn from_config <
@@ -1186,18 +1196,18 @@ impl BackgroundProcessor {
11861196/// # Example
11871197/// ```
11881198/// # use lightning_background_processor::*;
1189- /// let config = BackgroundProcessorConfigBuilder::new(
1199+ /// let mut builder = BackgroundProcessorConfigBuilder::new(
11901200/// persister,
11911201/// event_handler,
11921202/// chain_monitor,
11931203/// channel_manager,
11941204/// gossip_sync,
11951205/// peer_manager,
11961206/// logger
1197- /// )
1198- /// .with_onion_messenger(messenger) // Optional
1199- /// .with_scorer(scorer) // Optional
1200- /// .build();
1207+ /// );
1208+ /// builder .with_onion_messenger(messenger); // Optional
1209+ /// .with_scorer(scorer); // Optional
1210+ /// let config = builder .build();
12011211///
12021212/// // Use with BackgroundProcessor
12031213/// let processor = BackgroundProcessor::from_config(config);
@@ -1209,7 +1219,7 @@ impl BackgroundProcessor {
12091219/// process_events_async(config, sleeper, mobile_interruptable_platform, fetch_time).await?;"
12101220) ]
12111221/// ```
1212- #[ cfg( feature = "std" ) ]
1222+ #[ cfg( any ( feature = "std" , feature = "futures" ) ) ]
12131223pub struct BackgroundProcessorConfig <
12141224 ' a ,
12151225 UL : ' static + Deref + Send + Sync ,
@@ -1219,7 +1229,8 @@ pub struct BackgroundProcessorConfig<
12191229 G : ' static + Deref < Target = NetworkGraph < L > > + Send + Sync ,
12201230 L : ' static + Deref + Send + Sync ,
12211231 P : ' static + Deref + Send + Sync ,
1222- EH : ' static + EventHandler + Send ,
1232+ #[ cfg( feature = "std" ) ] EH : ' static + EventHandler + Send ,
1233+ #[ cfg( feature = "futures" ) ] EH : ' static + Fn ( Event ) -> core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
12231234 PS : ' static + Deref + Send ,
12241235 M : ' static
12251236 + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P > >
@@ -1346,7 +1357,7 @@ where
13461357 PM :: Target : APeerManager + Send + Sync ,
13471358{
13481359 /// Creates a new builder instance.
1349- pub ( crate ) fn new (
1360+ pub fn new (
13501361 persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
13511362 gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM , logger : L ,
13521363 ) -> Self {
@@ -1405,7 +1416,9 @@ impl Drop for BackgroundProcessor {
14051416
14061417#[ cfg( all( feature = "std" , test) ) ]
14071418mod tests {
1408- use super :: { BackgroundProcessor , GossipSync , FRESHNESS_TIMER } ;
1419+ use super :: {
1420+ BackgroundProcessor , BackgroundProcessorConfigBuilder , GossipSync , FRESHNESS_TIMER ,
1421+ } ;
14091422 use bitcoin:: constants:: { genesis_block, ChainHash } ;
14101423 use bitcoin:: hashes:: Hash ;
14111424 use bitcoin:: locktime:: absolute:: LockTime ;
@@ -2338,18 +2351,19 @@ mod tests {
23382351 Persister :: new ( data_dir) . with_manager_error ( std:: io:: ErrorKind :: Other , "test" ) ,
23392352 ) ;
23402353
2341- let config = BackgroundProcessorConfigBuilder :: new (
2354+ let mut builder = BackgroundProcessorConfigBuilder :: new (
23422355 persister,
23432356 |_: _ | async { Ok ( ( ) ) } ,
23442357 nodes[ 0 ] . chain_monitor . clone ( ) ,
23452358 nodes[ 0 ] . node . clone ( ) ,
23462359 nodes[ 0 ] . rapid_gossip_sync ( ) ,
23472360 nodes[ 0 ] . peer_manager . clone ( ) ,
23482361 nodes[ 0 ] . logger . clone ( ) ,
2349- )
2350- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2351- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
2352- . build ( ) ;
2362+ ) ;
2363+ builder
2364+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2365+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
2366+ let config = builder. build ( ) ;
23532367
23542368 let bp_future = super :: process_events_async (
23552369 config,
@@ -2822,18 +2836,19 @@ mod tests {
28222836 let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
28232837 let persister = Arc :: new ( Persister :: new ( data_dir) . with_graph_persistence_notifier ( sender) ) ;
28242838
2825- let config = BackgroundProcessorConfigBuilder :: new (
2839+ let mut builder = BackgroundProcessorConfigBuilder :: new (
28262840 persister,
28272841 |_: _ | async { Ok ( ( ) ) } ,
28282842 nodes[ 0 ] . chain_monitor . clone ( ) ,
28292843 nodes[ 0 ] . node . clone ( ) ,
28302844 nodes[ 0 ] . rapid_gossip_sync ( ) ,
28312845 nodes[ 0 ] . peer_manager . clone ( ) ,
28322846 nodes[ 0 ] . logger . clone ( ) ,
2833- )
2834- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2835- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
2836- . build ( ) ;
2847+ ) ;
2848+ builder
2849+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
2850+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
2851+ let config = builder. build ( ) ;
28372852
28382853 let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
28392854 let bp_future = super :: process_events_async (
@@ -3040,18 +3055,19 @@ mod tests {
30403055
30413056 let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
30423057
3043- let config = BackgroundProcessorConfigBuilder :: new (
3058+ let mut builder = BackgroundProcessorConfigBuilder :: new (
30443059 persister,
30453060 event_handler,
30463061 nodes[ 0 ] . chain_monitor . clone ( ) ,
30473062 nodes[ 0 ] . node . clone ( ) ,
30483063 nodes[ 0 ] . no_gossip_sync ( ) ,
30493064 nodes[ 0 ] . peer_manager . clone ( ) ,
30503065 nodes[ 0 ] . logger . clone ( ) ,
3051- )
3052- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3053- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
3054- . build ( ) ;
3066+ ) ;
3067+ builder
3068+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3069+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
3070+ let config = builder. build ( ) ;
30553071
30563072 let bp_future = super :: process_events_async (
30573073 config,
@@ -3086,11 +3102,11 @@ mod tests {
30863102 }
30873103
30883104 #[ test]
3089- fn test_background_processor_builder ( ) {
3105+ fn test_background_processor_config_builder ( ) {
30903106 // Test that when a new channel is created, the ChannelManager needs to be re-persisted with
30913107 // updates. Also test that when new updates are available, the manager signals that it needs
30923108 // re-persistence and is successfully re-persisted.
3093- let ( persist_dir, nodes) = create_nodes ( 2 , "test_background_processor_builder " ) ;
3109+ let ( persist_dir, nodes) = create_nodes ( 2 , "test_background_processor_config_builder " ) ;
30943110
30953111 // Go through the channel creation process so that each node has something to persist. Since
30963112 // open_channel consumes events, it must complete before starting BackgroundProcessor to
@@ -3101,18 +3117,19 @@ mod tests {
31013117 let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
31023118 let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
31033119 let event_handler = |_: _ | Ok ( ( ) ) ;
3104- let config = BackgroundProcessorConfigBuilder :: new (
3120+ let mut builder = BackgroundProcessorConfigBuilder :: new (
31053121 persister,
31063122 event_handler,
31073123 nodes[ 0 ] . chain_monitor . clone ( ) ,
31083124 nodes[ 0 ] . node . clone ( ) ,
31093125 nodes[ 0 ] . p2p_gossip_sync ( ) ,
31103126 nodes[ 0 ] . peer_manager . clone ( ) ,
31113127 nodes[ 0 ] . logger . clone ( ) ,
3112- )
3113- . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3114- . with_scorer ( nodes[ 0 ] . scorer . clone ( ) )
3115- . build ( ) ;
3128+ ) ;
3129+ builder
3130+ . with_onion_messenger ( nodes[ 0 ] . messenger . clone ( ) )
3131+ . with_scorer ( nodes[ 0 ] . scorer . clone ( ) ) ;
3132+ let config = builder. build ( ) ;
31163133
31173134 let bg_processor = BackgroundProcessor :: from_config ( config) ;
31183135
@@ -3164,7 +3181,7 @@ mod tests {
31643181 . unwrap ( ) ;
31653182
31663183 // Check that the force-close updates are persisted
3167- check_persisted_data ! ( nodes[ 0 ] . node, manager_path . clone( ) ) ;
3184+ check_persisted_data ! ( nodes[ 0 ] . node, filepath . clone( ) ) ;
31683185 loop {
31693186 if !nodes[ 0 ] . node . get_event_or_persist_condvar_value ( ) {
31703187 break ;
@@ -3174,7 +3191,7 @@ mod tests {
31743191 // Check network graph is persisted
31753192 let filepath =
31763193 get_full_filepath ( format ! ( "{}_persister_0" , & persist_dir) , "network_graph" . to_string ( ) ) ;
3177- check_persisted_data ! ( nodes[ 0 ] . network_graph, filepath) ;
3194+ check_persisted_data ! ( nodes[ 0 ] . network_graph, filepath. clone ( ) ) ;
31783195
31793196 // Check scorer is persisted
31803197 let filepath =
0 commit comments