mithril_aggregator/dependency_injection/builder/enablers/
misc.rs

1//! Miscellaneous enablers
2//!
3//! This naming is not ideal, we should either:
4//! - group these enablers into more logical categories
5//! - redefine the actual categories so those miscellaneous enablers fit into them
6
7use std::sync::Arc;
8use std::time::Duration;
9
10use mithril_signed_entity_lock::SignedEntityTypeLock;
11
12use crate::database::repository::CertificateRepository;
13use crate::dependency_injection::{DependenciesBuilder, Result};
14use crate::get_dependency;
15use crate::services::{
16    AggregatorClient, AggregatorHTTPClient, MessageService, MithrilMessageService,
17};
18impl DependenciesBuilder {
19    async fn build_signed_entity_type_lock(&mut self) -> Result<Arc<SignedEntityTypeLock>> {
20        let signed_entity_lock = Arc::new(SignedEntityTypeLock::default());
21        Ok(signed_entity_lock)
22    }
23
24    /// Get the [SignedEntityTypeLock] instance
25    pub async fn get_signed_entity_type_lock(&mut self) -> Result<Arc<SignedEntityTypeLock>> {
26        get_dependency!(self.signed_entity_type_lock)
27    }
28
29    /// build HTTP message service
30    pub async fn build_message_service(&mut self) -> Result<Arc<dyn MessageService>> {
31        let certificate_repository = Arc::new(CertificateRepository::new(
32            self.get_sqlite_connection().await?,
33        ));
34        let signed_entity_storer = self.get_signed_entity_storer().await?;
35        let immutable_file_digest_mapper = self.get_immutable_file_digest_mapper().await?;
36        let epoch_service = self.get_epoch_service().await?;
37        let service = MithrilMessageService::new(
38            certificate_repository,
39            signed_entity_storer,
40            immutable_file_digest_mapper,
41            epoch_service,
42        );
43
44        Ok(Arc::new(service))
45    }
46
47    /// [MessageService] service
48    pub async fn get_message_service(&mut self) -> Result<Arc<dyn MessageService>> {
49        get_dependency!(self.message_service)
50    }
51
52    /// build an [AggregatorClient]
53    pub async fn build_leader_aggregator_client(&mut self) -> Result<Arc<dyn AggregatorClient>> {
54        let leader_aggregator_endpoint = self
55            .configuration
56            .leader_aggregator_endpoint()
57            .unwrap_or_default();
58        let aggregator_client = AggregatorHTTPClient::new(
59            leader_aggregator_endpoint,
60            None,
61            self.get_api_version_provider().await?,
62            Some(Duration::from_secs(30)),
63            self.root_logger(),
64        );
65
66        Ok(Arc::new(aggregator_client))
67    }
68
69    /// Returns a leader [AggregatorClient]
70    pub async fn get_leader_aggregator_client(&mut self) -> Result<Arc<dyn AggregatorClient>> {
71        get_dependency!(self.leader_aggregator_client)
72    }
73}