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#[async_trait]
10pub trait BlockScanner: Sync + Send {
11 async fn scan(
13 &self,
14 from: Option<RawCardanoPoint>,
15 until: BlockNumber,
16 ) -> StdResult<Box<dyn BlockStreamer>>;
17}
18
19#[derive(Debug, Clone, PartialEq)]
21pub enum ChainScannedBlocks {
22 RollForwards(Vec<ScannedBlock>),
24 RollBackward(SlotNumber),
26}
27
28#[async_trait]
30pub trait BlockStreamer: Sync + Send {
31 async fn poll_next(&mut self) -> StdResult<Option<ChainScannedBlocks>>;
33
34 fn last_polled_point(&self) -> Option<RawCardanoPoint>;
36}