partner_chains_db_sync_data_sources/sidechain_rpc/
mod.rs

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