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