@@ -10,7 +10,10 @@ use alloy::{
1010 sol_types:: SolEvent ,
1111} ;
1212use alloy_node_bindings:: { Anvil , AnvilInstance } ;
13- use event_scanner:: { EventFilter , EventScanner , EventScannerMessage , LiveEventScanner } ;
13+ use event_scanner:: {
14+ EventFilter , EventScanner , EventScannerMessage , HistoricEventScanner , LiveEventScanner ,
15+ SyncEventScanner , event_lib:: modes:: LatestEventScanner ,
16+ } ;
1417use tokio_stream:: wrappers:: ReceiverStream ;
1518
1619// Shared test contract used across integration tests
@@ -42,23 +45,32 @@ sol! {
4245 }
4346}
4447
45- pub struct LiveScannerSetup < P >
48+ pub struct ScannerSetup < S , P >
4649where
4750 P : Provider < Ethereum > + Clone ,
4851{
4952 pub provider : RootProvider ,
5053 pub contract : TestCounter :: TestCounterInstance < Arc < P > > ,
51- pub scanner : LiveEventScanner < Ethereum > ,
54+ pub scanner : S ,
5255 pub stream : ReceiverStream < EventScannerMessage > ,
5356 pub anvil : AnvilInstance ,
5457}
5558
59+ pub type LiveScannerSetup < P > = ScannerSetup < LiveEventScanner < Ethereum > , P > ;
60+ pub type HistoricScannerSetup < P > = ScannerSetup < HistoricEventScanner < Ethereum > , P > ;
61+ pub type SyncScannerSetup < P > = ScannerSetup < SyncEventScanner < Ethereum > , P > ;
62+ pub type LatestScannerSetup < P > = ScannerSetup < LatestEventScanner < Ethereum > , P > ;
63+
5664#[ allow( clippy:: missing_errors_doc) ]
57- pub async fn setup_live_scanner (
65+ pub async fn setup_common (
5866 block_interval : Option < f64 > ,
5967 filter : Option < EventFilter > ,
60- confirmations : u64 ,
61- ) -> anyhow:: Result < LiveScannerSetup < impl Provider < Ethereum > + Clone > > {
68+ ) -> anyhow:: Result < (
69+ AnvilInstance ,
70+ RootProvider ,
71+ TestCounter :: TestCounterInstance < Arc < RootProvider > > ,
72+ EventFilter ,
73+ ) > {
6274 let anvil = spawn_anvil ( block_interval) ?;
6375 let provider = build_provider ( & anvil) . await ?;
6476 let contract = deploy_counter ( Arc :: new ( provider. clone ( ) ) ) . await ?;
@@ -69,15 +81,87 @@ pub async fn setup_live_scanner(
6981
7082 let filter = filter. unwrap_or ( default_filter) ;
7183
84+ Ok ( ( anvil, provider, contract, filter) )
85+ }
86+
87+ #[ allow( clippy:: missing_errors_doc) ]
88+ pub async fn setup_live_scanner (
89+ block_interval : Option < f64 > ,
90+ filter : Option < EventFilter > ,
91+ confirmations : u64 ,
92+ ) -> anyhow:: Result < LiveScannerSetup < impl Provider < Ethereum > + Clone > > {
93+ let ( anvil, provider, contract, filter) = setup_common ( block_interval, filter) . await ?;
94+
7295 let mut scanner = EventScanner :: live ( )
7396 . block_confirmations ( confirmations)
7497 . connect_ws ( anvil. ws_endpoint_url ( ) )
7598 . await ?;
7699
77100 let stream = scanner. create_event_stream ( filter) ;
78101
79- // return anvil otherwise it doesnt live long enough...
80- Ok ( LiveScannerSetup { provider, contract, scanner, stream, anvil } )
102+ Ok ( ScannerSetup { provider, contract, scanner, stream, anvil } )
103+ }
104+
105+ #[ allow( clippy:: missing_errors_doc) ]
106+ pub async fn setup_sync_scanner (
107+ block_interval : Option < f64 > ,
108+ filter : Option < EventFilter > ,
109+ confirmations : u64 ,
110+ ) -> anyhow:: Result < SyncScannerSetup < impl Provider < Ethereum > + Clone > > {
111+ let ( anvil, provider, contract, filter) = setup_common ( block_interval, filter) . await ?;
112+
113+ let mut scanner = EventScanner :: sync ( )
114+ . block_confirmations ( confirmations)
115+ . connect_ws ( anvil. ws_endpoint_url ( ) )
116+ . await ?;
117+
118+ let stream = scanner. create_event_stream ( filter) ;
119+
120+ Ok ( ScannerSetup { provider, contract, scanner, stream, anvil } )
121+ }
122+
123+ #[ allow( clippy:: missing_errors_doc) ]
124+ pub async fn setup_historic_scanner (
125+ block_interval : Option < f64 > ,
126+ filter : Option < EventFilter > ,
127+ from : BlockNumberOrTag ,
128+ to : BlockNumberOrTag ,
129+ ) -> anyhow:: Result < HistoricScannerSetup < impl Provider < Ethereum > + Clone > > {
130+ let ( anvil, provider, contract, filter) = setup_common ( block_interval, filter) . await ?;
131+
132+ let mut scanner = EventScanner :: historic ( )
133+ . from_block ( from)
134+ . to_block ( to)
135+ . connect_ws ( anvil. ws_endpoint_url ( ) )
136+ . await ?;
137+
138+ let stream = scanner. create_event_stream ( filter) ;
139+
140+ Ok ( ScannerSetup { provider, contract, scanner, stream, anvil } )
141+ }
142+
143+ #[ allow( clippy:: missing_errors_doc) ]
144+ pub async fn setup_latest_scanner (
145+ block_interval : Option < f64 > ,
146+ filter : Option < EventFilter > ,
147+ count : usize ,
148+ from : Option < BlockNumberOrTag > ,
149+ to : Option < BlockNumberOrTag > ,
150+ ) -> anyhow:: Result < LatestScannerSetup < impl Provider < Ethereum > + Clone > > {
151+ let ( anvil, provider, contract, filter) = setup_common ( block_interval, filter) . await ?;
152+ let mut builder = EventScanner :: latest ( ) . count ( count) ;
153+ if let Some ( f) = from {
154+ builder = builder. from_block ( f) ;
155+ }
156+ if let Some ( t) = to {
157+ builder = builder. to_block ( t) ;
158+ }
159+
160+ let mut scanner = builder. connect_ws ( anvil. ws_endpoint_url ( ) ) . await ?;
161+
162+ let stream = scanner. create_event_stream ( filter) ;
163+
164+ Ok ( ScannerSetup { provider, contract, scanner, stream, anvil } )
81165}
82166
83167#[ allow( clippy:: missing_errors_doc) ]
0 commit comments