Skip to content

Commit 575349e

Browse files
committed
ref: better error
1 parent 96783cd commit 575349e

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

src/error.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ pub enum ScannerError {
2222
#[error("Operation timed out")]
2323
Timeout,
2424

25-
#[error("Block number {0} exceeds latest block {1}")]
26-
BlockExceedsLatest(u64, u64),
25+
#[error("{0} {1} exceeds the latest block {2}")]
26+
BlockExceedsLatest(&'static str, u64, u64),
2727

2828
#[error("Event count must be greater than 0")]
2929
InvalidEventCount,

src/event_scanner/scanner/historic.rs

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,31 @@ impl EventScannerBuilder<Historic> {
4040
let provider = scanner.block_range_scanner.provider();
4141
let latest_block = provider.get_block_number().await?;
4242

43-
let from_num = resolve_block_number(&scanner.config.from_block, latest_block);
44-
let to_num = resolve_block_number(&scanner.config.to_block, latest_block);
45-
46-
let max_block = from_num.max(to_num);
47-
48-
if max_block > latest_block {
49-
return Err(ScannerError::BlockExceedsLatest(max_block, latest_block));
43+
let from_num = scanner.config.from_block.as_number().unwrap_or(0);
44+
let to_num = scanner.config.to_block.as_number().unwrap_or(0);
45+
46+
let from_exceeds = from_num > latest_block;
47+
let to_exceeds = to_num > latest_block;
48+
49+
match (from_exceeds, to_exceeds) {
50+
(true, true) => Err(ScannerError::BlockExceedsLatest(
51+
"from_block and to_block",
52+
from_num.max(to_num),
53+
latest_block,
54+
))?,
55+
(true, false) => {
56+
Err(ScannerError::BlockExceedsLatest("from_block", from_num, latest_block))?;
57+
}
58+
(false, true) => {
59+
Err(ScannerError::BlockExceedsLatest("to_block", to_num, latest_block))?;
60+
}
61+
(false, false) => {}
5062
}
5163

5264
Ok(scanner)
5365
}
5466
}
5567

56-
/// Helper function to resolve `BlockNumberOrTag` to u64
57-
fn resolve_block_number(block: &BlockNumberOrTag, latest: u64) -> u64 {
58-
match block {
59-
BlockNumberOrTag::Number(n) => *n,
60-
BlockNumberOrTag::Earliest => 0,
61-
_ => latest,
62-
}
63-
}
64-
6568
impl<N: Network> EventScanner<Historic, N> {
6669
/// Starts the scanner.
6770
///
@@ -151,7 +154,7 @@ mod tests {
151154
.await;
152155

153156
match result {
154-
Err(ScannerError::BlockExceedsLatest(max, latest)) => {
157+
Err(ScannerError::BlockExceedsLatest("from_block", max, latest)) => {
155158
assert_eq!(max, latest_block + 100);
156159
assert_eq!(latest, latest_block);
157160
}
@@ -173,7 +176,7 @@ mod tests {
173176
.await;
174177

175178
match result {
176-
Err(ScannerError::BlockExceedsLatest(max, latest)) => {
179+
Err(ScannerError::BlockExceedsLatest("to_block", max, latest)) => {
177180
assert_eq!(max, latest_block + 100);
178181
assert_eq!(latest, latest_block);
179182
}
@@ -189,17 +192,17 @@ mod tests {
189192
let latest_block = provider.get_block_number().await.unwrap();
190193

191194
let result = EventScannerBuilder::historic()
192-
.to_block(latest_block + 50)
195+
.from_block(latest_block + 50)
193196
.to_block(latest_block + 100)
194197
.connect(provider)
195198
.await;
196199

197200
match result {
198-
Err(ScannerError::BlockExceedsLatest(max, latest)) => {
201+
Err(ScannerError::BlockExceedsLatest("from_block and to_block", max, latest)) => {
199202
assert_eq!(max, latest_block + 100);
200203
assert_eq!(latest, latest_block);
201204
}
202-
_ => panic!("Expected BlockExceedsLatest error"),
205+
_ => panic!("Expected BlockExceedsLatest error with 'from_block and to_block'"),
203206
}
204207
}
205208

0 commit comments

Comments
 (0)