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::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        if self.ticker_service.is_none() {
26            self.ticker_service = Some(self.build_ticker_service().await?);
27        }
28
29        Ok(self.ticker_service.as_ref().cloned().unwrap())
30    }
31
32    async fn build_immutable_file_observer(&mut self) -> Result<Arc<dyn ImmutableFileObserver>> {
33        let immutable_file_observer: Arc<dyn ImmutableFileObserver> =
34            match self.configuration.environment {
35                ExecutionEnvironment::Production => Arc::new(ImmutableFileSystemObserver::new(
36                    &self.configuration.db_directory,
37                )),
38                _ => Arc::new(DumbImmutableFileObserver::default()),
39            };
40
41        Ok(immutable_file_observer)
42    }
43
44    /// Return a [ImmutableFileObserver] instance.
45    pub async fn get_immutable_file_observer(&mut self) -> Result<Arc<dyn ImmutableFileObserver>> {
46        if self.immutable_file_observer.is_none() {
47            self.immutable_file_observer = Some(self.build_immutable_file_observer().await?);
48        }
49
50        Ok(self.immutable_file_observer.as_ref().cloned().unwrap())
51    }
52}