mithril_cardano_node_chain/chain_scanner/
interface.rs1use async_trait::async_trait;
2
3use mithril_common::StdResult;
4use mithril_common::entities::{BlockNumber, SlotNumber};
5
6use crate::entities::{RawCardanoPoint, ScannedBlock};
7
8#[cfg_attr(test, mockall::automock)]
10#[async_trait]
11pub trait BlockScanner: Sync + Send {
12 async fn scan(
14 &self,
15 from: Option<RawCardanoPoint>,
16 until: BlockNumber,
17 ) -> StdResult<Box<dyn BlockStreamer>>;
18}
19
20#[derive(Debug, Clone, PartialEq)]
22pub enum ChainScannedBlocks {
23 RollForwards(Vec<ScannedBlock>),
25 RollBackward(SlotNumber),
27}
28
29#[async_trait]
31pub trait BlockStreamer: Sync + Send {
32 async fn poll_next(&mut self) -> StdResult<Option<ChainScannedBlocks>>;
34
35 fn last_polled_point(&self) -> Option<RawCardanoPoint>;
37}