partner_chains_mock_data_sources/
mc_hash.rs

1use crate::Result;
2use crate::block::BlockDataSourceMock;
3use async_trait::async_trait;
4use sidechain_domain::*;
5use sp_timestamp::Timestamp;
6use std::sync::Arc;
7
8pub struct McHashDataSourceMock {
9	block_source: Arc<BlockDataSourceMock>,
10}
11
12impl McHashDataSourceMock {
13	pub fn new(inner: Arc<BlockDataSourceMock>) -> Self {
14		Self { block_source: inner }
15	}
16}
17
18#[async_trait]
19impl sidechain_mc_hash::McHashDataSource for McHashDataSourceMock {
20	async fn get_latest_stable_block_for(
21		&self,
22		reference_timestamp: sp_timestamp::Timestamp,
23	) -> Result<Option<MainchainBlock>> {
24		Ok(self
25			.block_source
26			.get_latest_stable_block_for(Timestamp::new(reference_timestamp.as_millis()))
27			.await?)
28	}
29
30	async fn get_stable_block_for(
31		&self,
32		hash: McBlockHash,
33		reference_timestamp: sp_timestamp::Timestamp,
34	) -> Result<Option<MainchainBlock>> {
35		Ok(self
36			.block_source
37			.get_stable_block_for(hash, Timestamp::new(reference_timestamp.as_millis()))
38			.await?)
39	}
40
41	async fn get_block_by_hash(&self, hash: McBlockHash) -> Result<Option<MainchainBlock>> {
42		Ok(self.block_source.get_block_by_hash(hash).await?)
43	}
44}