mithril_aggregator/dependency_injection/builder/support/
compatibility.rs1use std::sync::Arc;
2
3use mithril_common::api_version::APIVersionProvider;
4use mithril_common::entities::Epoch;
5use mithril_common::era::adapters::{EraReaderAdapterBuilder, EraReaderDummyAdapter};
6use mithril_common::era::{EraChecker, EraMarker, EraReader, EraReaderAdapter, SupportedEra};
7
8use crate::dependency_injection::{DependenciesBuilder, DependenciesBuilderError, Result};
9use crate::get_dependency;
10use crate::ExecutionEnvironment;
11impl DependenciesBuilder {
12 async fn build_api_version_provider(&mut self) -> Result<Arc<APIVersionProvider>> {
13 let api_version_provider = Arc::new(APIVersionProvider::new(self.get_era_checker().await?));
14
15 Ok(api_version_provider)
16 }
17
18 pub async fn get_api_version_provider(&mut self) -> Result<Arc<APIVersionProvider>> {
20 get_dependency!(self.api_version_provider)
21 }
22
23 async fn build_era_reader(&mut self) -> Result<Arc<EraReader>> {
24 let era_adapter: Arc<dyn EraReaderAdapter> = match self.configuration.environment() {
25 ExecutionEnvironment::Production => EraReaderAdapterBuilder::new(
26 &self.configuration.era_reader_adapter_type(),
27 &self.configuration.era_reader_adapter_params(),
28 )
29 .build(self.get_chain_observer().await?)
30 .map_err(|e| DependenciesBuilderError::Initialization {
31 message: "Could not build EraReader as dependency.".to_string(),
32 error: Some(e.into()),
33 })?,
34 _ => Arc::new(EraReaderDummyAdapter::from_markers(vec![EraMarker::new(
35 &SupportedEra::dummy().to_string(),
36 Some(Epoch(0)),
37 )])),
38 };
39
40 Ok(Arc::new(EraReader::new(era_adapter)))
41 }
42
43 pub async fn get_era_reader(&mut self) -> Result<Arc<EraReader>> {
45 get_dependency!(self.era_reader)
46 }
47
48 async fn build_era_checker(&mut self) -> Result<Arc<EraChecker>> {
49 let current_epoch = self
50 .get_ticker_service()
51 .await?
52 .get_current_epoch()
53 .await
54 .map_err(|e| DependenciesBuilderError::Initialization {
55 message: "Error while building EraChecker".to_string(),
56 error: Some(e),
57 })?;
58 let era_epoch_token = self
59 .get_era_reader()
60 .await?
61 .read_era_epoch_token(current_epoch)
62 .await
63 .map_err(|e| DependenciesBuilderError::Initialization {
64 message: "Error while building EraChecker".to_string(),
65 error: Some(e.into()),
66 })?;
67 let era_checker = Arc::new(EraChecker::new(
68 era_epoch_token.get_current_supported_era().map_err(|e| {
69 DependenciesBuilderError::Initialization {
70 message: "Error while building EraChecker".to_string(),
71 error: Some(e),
72 }
73 })?,
74 era_epoch_token.get_current_epoch(),
75 ));
76
77 Ok(era_checker)
78 }
79
80 pub async fn get_era_checker(&mut self) -> Result<Arc<EraChecker>> {
82 get_dependency!(self.era_checker)
83 }
84}