Skip to content

Commit 04f6c2e

Browse files
committed
ref: remove panic and add error
1 parent 737e6d5 commit 04f6c2e

File tree

2 files changed

+53
-16
lines changed

2 files changed

+53
-16
lines changed

src/error.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ pub enum ScannerError {
2121

2222
#[error("Operation timed out")]
2323
Timeout,
24+
25+
#[error("Block number {0} exceeds latest block {1}")]
26+
BlockExceedsLatest(u64, u64),
2427
}
2528

2629
impl From<RobustProviderError> for ScannerError {

src/event_scanner/scanner/historic.rs

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@ impl EventScannerBuilder<Historic> {
2525
/// Validates that the maximum of `from_block` and `to_block` does not exceed
2626
/// the latest block on the chain.
2727
///
28-
/// # Panics
29-
///
30-
/// If to or from block > latest block
31-
///
3228
/// # Errors
3329
///
34-
/// Returns an error if the provider connection fails
30+
/// Returns an error if:
31+
/// - The provider connection fails
32+
/// - The specified block range exceeds the latest block on the chain
3533
pub async fn connect<N: Network>(
3634
self,
3735
provider: impl IntoRobustProvider<N>,
@@ -46,7 +44,9 @@ impl EventScannerBuilder<Historic> {
4644

4745
let max_block = from_num.max(to_num);
4846

49-
assert!((max_block <= latest_block), "Invalid historical block range");
47+
if max_block > latest_block {
48+
return Err(ScannerError::BlockExceedsLatest(max_block, latest_block));
49+
}
5050

5151
Ok(scanner)
5252
}
@@ -133,34 +133,68 @@ mod tests {
133133
}
134134

135135
#[tokio::test]
136-
#[should_panic(expected = "Invalid historical block range")]
137-
async fn test_from_block_above_latest_panics() {
136+
async fn test_from_block_above_latest_returns_error() {
138137
let anvil = Anvil::new().try_spawn().unwrap();
139138
let provider = ProviderBuilder::new().connect_http(anvil.endpoint_url());
140139

141140
let latest_block = provider.get_block_number().await.unwrap();
142141

143-
let _scanner = EventScannerBuilder::historic()
142+
let result = EventScannerBuilder::historic()
144143
.from_block(latest_block + 100)
145144
.to_block(latest_block)
146145
.connect(provider)
147-
.await
148-
.unwrap();
146+
.await;
147+
148+
match result {
149+
Err(ScannerError::BlockExceedsLatest(max, latest)) => {
150+
assert_eq!(max, latest_block + 100);
151+
assert_eq!(latest, latest_block);
152+
}
153+
_ => panic!("Expected BlockExceedsLatest error"),
154+
}
149155
}
150156

151157
#[tokio::test]
152-
#[should_panic(expected = "Invalid historical block range")]
153-
async fn test_to_block_above_latest_panics() {
158+
async fn test_to_block_above_latest_returns_error() {
154159
let anvil = Anvil::new().try_spawn().unwrap();
155160
let provider = ProviderBuilder::new().connect_http(anvil.endpoint_url());
156161

157162
let latest_block = provider.get_block_number().await.unwrap();
158163

159-
let _scanner = EventScannerBuilder::historic()
164+
let result = EventScannerBuilder::historic()
160165
.from_block(0)
161166
.to_block(latest_block + 100)
162167
.connect(provider)
163-
.await
164-
.unwrap();
168+
.await;
169+
170+
match result {
171+
Err(ScannerError::BlockExceedsLatest(max, latest)) => {
172+
assert_eq!(max, latest_block + 100);
173+
assert_eq!(latest, latest_block);
174+
}
175+
_ => panic!("Expected BlockExceedsLatest error"),
176+
}
177+
}
178+
179+
#[tokio::test]
180+
async fn test_to_and_from_block_above_latest_returns_error() {
181+
let anvil = Anvil::new().try_spawn().unwrap();
182+
let provider = ProviderBuilder::new().connect_http(anvil.endpoint_url());
183+
184+
let latest_block = provider.get_block_number().await.unwrap();
185+
186+
let result = EventScannerBuilder::historic()
187+
.to_block(latest_block + 50)
188+
.to_block(latest_block + 100)
189+
.connect(provider)
190+
.await;
191+
192+
match result {
193+
Err(ScannerError::BlockExceedsLatest(max, latest)) => {
194+
assert_eq!(max, latest_block + 100);
195+
assert_eq!(latest, latest_block);
196+
}
197+
_ => panic!("Expected BlockExceedsLatest error"),
198+
}
165199
}
166200
}

0 commit comments

Comments
 (0)