mithril_aggregator/dependency_injection/builder/enablers/
ticker.rs

1use std::sync::Arc;
2
3use mithril_cardano_node_internal_database::test::double::DumbImmutableFileObserver;
4use mithril_cardano_node_internal_database::{ImmutableFileObserver, ImmutableFileSystemObserver};
5use mithril_ticker::{MithrilTickerService, TickerService};
6
7use crate::dependency_injection::{DependenciesBuilder, Result};
8use crate::get_dependency;
9use crate::ExecutionEnvironment;
10
11impl DependenciesBuilder {
12    /// Create [TickerService] instance.
13    pub async fn build_ticker_service(&mut self) -> Result<Arc<dyn TickerService>> {
14        let chain_observer = self.get_chain_observer().await?;
15        let immutable_observer = self.get_immutable_file_observer().await?;
16
17        Ok(Arc::new(MithrilTickerService::new(
18            chain_observer,
19            immutable_observer,
20        )))
21    }
22
23    /// [TickerService] service
24    pub async fn get_ticker_service(&mut self) -> Result<Arc<dyn TickerService>> {
25        get_dependency!(self.ticker_service)
26    }
27
28    async fn build_immutable_file_observer(&mut self) -> Result<Arc<dyn ImmutableFileObserver>> {
29        let immutable_file_observer: Arc<dyn ImmutableFileObserver> =
30            match self.configuration.environment() {
31                ExecutionEnvironment::Production => Arc::new(ImmutableFileSystemObserver::new(
32                    &self.configuration.db_directory(),
33                )),
34                _ => Arc::new(DumbImmutableFileObserver::default()),
35            };
36
37        Ok(immutable_file_observer)
38    }
39
40    /// Return a [ImmutableFileObserver] instance.
41    pub async fn get_immutable_file_observer(&mut self) -> Result<Arc<dyn ImmutableFileObserver>> {
42        get_dependency!(self.immutable_file_observer)
43    }
44}