partner_chains_db_sync_data_sources/sidechain_rpc/
mod.rs

1//! Db-Sync data source used by Partner Chain Json RPC
2use crate::{block::BlockDataSourceImpl, metrics::McFollowerMetrics, observed_async_trait};
3use pallet_sidechain_rpc::SidechainRpcDataSource;
4use sidechain_domain::MainchainBlock;
5use std::sync::Arc;
6
7/// Db-Sync data source serving basic Cardano block data
8pub struct SidechainRpcDataSourceImpl {
9	/// [BlockDataSourceImpl] instance shared with other data sources for cache reuse.
10	inner: Arc<BlockDataSourceImpl>,
11	/// Prometheus metrics client
12	metrics_opt: Option<McFollowerMetrics>,
13}
14
15impl SidechainRpcDataSourceImpl {
16	/// Creates a Sidechain new data source by wrapping the given instance of [BlockDataSourceImpl]
17	pub fn new(inner: Arc<BlockDataSourceImpl>, metrics_opt: Option<McFollowerMetrics>) -> Self {
18		Self { inner, metrics_opt }
19	}
20}
21
22observed_async_trait!(
23impl SidechainRpcDataSource for SidechainRpcDataSourceImpl {
24	async fn get_latest_block_info(
25		&self,
26	) -> Result<MainchainBlock, Box<dyn std::error::Error + Send + Sync>> {
27		self.inner.get_latest_block_info().await
28	}
29}
30);