mithril_aggregator/services/
aggregator_client.rs1use async_trait::async_trait;
2
3use mithril_aggregator_client::{
4 AggregatorHttpClient,
5 query::{GetCertificateQuery, GetCertificatesListQuery, GetEpochSettingsQuery},
6};
7use mithril_common::{StdResult, entities::Certificate, messages::TryFromMessageAdapter};
8
9use crate::entities::LeaderAggregatorEpochSettings;
10use crate::message_adapters::FromEpochSettingsAdapter;
11use crate::services::{LeaderAggregatorClient, RemoteCertificateRetriever};
12
13#[async_trait]
14impl LeaderAggregatorClient for AggregatorHttpClient {
15 async fn retrieve_epoch_settings(&self) -> StdResult<Option<LeaderAggregatorEpochSettings>> {
16 let epoch_settings = self.send(GetEpochSettingsQuery::current()).await?;
17 FromEpochSettingsAdapter::try_adapt(epoch_settings).map(Some)
18 }
19}
20
21#[async_trait]
22impl RemoteCertificateRetriever for AggregatorHttpClient {
23 async fn get_latest_certificate_details(&self) -> StdResult<Option<Certificate>> {
24 let latest_certificates_list = self.send(GetCertificatesListQuery::latest()).await?;
25
26 match latest_certificates_list.first() {
27 None => Ok(None),
28 Some(latest_certificate_list_item) => {
29 let latest_certificate_message = self
30 .send(GetCertificateQuery::by_hash(
31 &latest_certificate_list_item.hash,
32 ))
33 .await?;
34 latest_certificate_message.map(TryInto::try_into).transpose()
35 }
36 }
37 }
38
39 async fn get_genesis_certificate_details(&self) -> StdResult<Option<Certificate>> {
40 match self.send(GetCertificateQuery::latest_genesis()).await? {
41 Some(message) => Ok(Some(message.try_into()?)),
42 None => Ok(None),
43 }
44 }
45}