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 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 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 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}