mithril_common/cardano_block_scanner/
block_scanner.rs1use std::sync::Arc;
2
3use async_trait::async_trait;
4use slog::Logger;
5use tokio::sync::Mutex;
6
7use crate::cardano_block_scanner::{BlockScanner, BlockStreamer, RawCardanoPoint};
8use crate::chain_reader::ChainBlockReader;
9use crate::entities::BlockNumber;
10use crate::StdResult;
11
12use super::ChainReaderBlockStreamer;
13
14pub struct CardanoBlockScanner {
18 chain_reader: Arc<Mutex<dyn ChainBlockReader>>,
19 max_roll_forwards_per_poll: usize,
20 logger: Logger,
21}
22
23impl CardanoBlockScanner {
24 pub fn new(
26 chain_reader: Arc<Mutex<dyn ChainBlockReader>>,
27 max_roll_forwards_per_poll: usize,
28 logger: Logger,
29 ) -> Self {
30 Self {
31 chain_reader,
32 max_roll_forwards_per_poll,
33 logger,
34 }
35 }
36}
37
38#[async_trait]
39impl BlockScanner for CardanoBlockScanner {
40 async fn scan(
41 &self,
42 from: Option<RawCardanoPoint>,
43 until: BlockNumber,
44 ) -> StdResult<Box<dyn BlockStreamer>> {
45 Ok(Box::new(
46 ChainReaderBlockStreamer::try_new(
47 self.chain_reader.clone(),
48 from,
49 until,
50 self.max_roll_forwards_per_poll,
51 self.logger.clone(),
52 )
53 .await?,
54 ))
55 }
56}