mithril_aggregator/message_adapters/
from_register_signer.rs

1use anyhow::Context;
2use mithril_common::{
3    StdResult,
4    entities::Signer,
5    messages::{RegisterSignerMessage, TryFromMessageAdapter},
6};
7
8/// Adapter to convert [RegisterSignerMessage] to [Signer] instances.
9pub struct FromRegisterSignerAdapter;
10
11impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter {
12    /// Method to trigger the conversion.
13    fn try_adapt(register_signer_message: RegisterSignerMessage) -> StdResult<Signer> {
14        Ok(Signer {
15            party_id: register_signer_message.party_id,
16            verification_key: register_signer_message.verification_key.try_into().with_context(
17                || "'FromRegisterSignerAdapter' can not convert the verification key",
18            )?,
19            verification_key_signature: match register_signer_message.verification_key_signature {
20                Some(verification_key_signature) => {
21                    Some(verification_key_signature.try_into().with_context(|| {
22                        "'FromRegisterSignerAdapter' can not convert the verification key signature"
23                    })?)
24                }
25                _ => None,
26            },
27            operational_certificate: match register_signer_message.operational_certificate {
28                Some(operational_certificate) => {
29                    Some(operational_certificate.try_into().with_context(|| {
30                        "'FromRegisterSignerAdapter' can not convert the operational certificate"
31                    })?)
32                }
33                _ => None,
34            },
35            kes_evolutions: register_signer_message.kes_evolutions,
36        })
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use mithril_common::test::double::Dummy;
43
44    use super::*;
45
46    #[test]
47    fn try_adapt_signer_registration_message_to_entity() {
48        let register_signer_message = RegisterSignerMessage {
49            party_id: "one".to_string(),
50            ..RegisterSignerMessage::dummy()
51        };
52
53        let signer = FromRegisterSignerAdapter::try_adapt(register_signer_message)
54            .expect("Converting message to signer should not fail");
55
56        assert_eq!("one".to_string(), signer.party_id);
57    }
58}