mithril_signer/services/signature_publisher/
http.rs

1use anyhow::Context;
2use async_trait::async_trait;
3
4use mithril_aggregator_client::{AggregatorHttpClient, query::PostRegisterSignatureQuery};
5use mithril_common::{
6    StdResult,
7    entities::{ProtocolMessage, SignedEntityType, SingleSignature},
8    messages::TryToMessageAdapter,
9};
10
11use crate::message_adapters::ToRegisterSignatureMessageAdapter;
12
13use super::SignaturePublisher;
14
15#[async_trait]
16impl SignaturePublisher for AggregatorHttpClient {
17    async fn publish(
18        &self,
19        signed_entity_type: &SignedEntityType,
20        signature: &SingleSignature,
21        protocol_message: &ProtocolMessage,
22    ) -> StdResult<()> {
23        let register_single_signature_message = ToRegisterSignatureMessageAdapter::try_adapt((
24            signed_entity_type.to_owned(),
25            signature.to_owned(),
26            protocol_message,
27        ))
28        .with_context(|| "Failed to adapt message to register single signature message")?;
29
30        self.send(PostRegisterSignatureQuery::new(
31            register_single_signature_message,
32        ))
33        .await?;
34
35        Ok(())
36    }
37}