mithril_aggregator/dependency_injection/builder/enablers/
ticker.rs

1use std::sync::Arc;
2
3use mithril_common::digesters::{
4    DumbImmutableFileObserver, ImmutableFileObserver, ImmutableFileSystemObserver,
5};
6use mithril_common::{MithrilTickerService, TickerService};
7
8use crate::dependency_injection::{DependenciesBuilder, Result};
9use crate::get_dependency;
10use crate::ExecutionEnvironment;
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}