mithril_signer/message_adapters/
to_register_signer_message.rs

1use anyhow::Context;
2use mithril_common::{
3    StdResult,
4    entities::{Epoch, Signer},
5    messages::{RegisterSignerMessage, TryToMessageAdapter},
6};
7
8/// Adapter to create [RegisterSignerMessage] from [Signer] instance.
9pub struct ToRegisterSignerMessageAdapter;
10
11impl TryToMessageAdapter<(Epoch, Signer), RegisterSignerMessage>
12    for ToRegisterSignerMessageAdapter
13{
14    /// Method to trigger the conversion.
15    fn try_adapt((epoch, signer): (Epoch, Signer)) -> StdResult<RegisterSignerMessage> {
16        let message = RegisterSignerMessage {
17            epoch,
18            party_id: signer.party_id,
19            verification_key_for_concatenation: signer.verification_key_for_concatenation.try_into().with_context(|| {
20                format!(
21                    "'ToRegisterSignerMessageAdapter' can not convert the verification key: '{:?}'",
22                    signer.verification_key_for_concatenation
23                )
24            })?,
25            verification_key_signature_for_concatenation: signer.verification_key_signature_for_concatenation.map(TryInto::try_into).transpose().with_context(|| {
26                format!(
27                        "'ToRegisterSignerMessageAdapter' can not convert the verification key signature: '{:?}'",
28                        signer.verification_key_signature_for_concatenation
29                    )
30            })?,
31            operational_certificate:  signer.operational_certificate.map(TryInto::try_into).transpose().with_context(|| {
32                "'ToRegisterSignerMessageAdapter' can not convert the operational certificate"
33            })?,
34            kes_evolutions: signer.kes_evolutions,
35            #[cfg(feature = "future_snark")]
36            verification_key_for_snark: signer.verification_key_for_snark.map(TryInto::try_into).transpose().with_context(|| {
37                format!(
38                    "'ToRegisterSignerMessageAdapter' can not convert the SNARK verification key: '{:?}'",
39                    signer.verification_key_for_snark
40                )
41            })?,
42            #[cfg(feature = "future_snark")]
43            verification_key_signature_for_snark: signer.verification_key_signature_for_snark.map(TryInto::try_into).transpose().with_context(|| {
44                format!(
45                    "'ToRegisterSignerMessageAdapter' can not convert the SNARK verification key signature: '{:?}'",
46                    signer.verification_key_signature_for_snark
47                )
48            })?,
49        };
50
51        Ok(message)
52    }
53}
54
55#[cfg(test)]
56mod tests {
57    use mithril_common::test::double::fake_data;
58
59    use super::*;
60
61    #[test]
62    fn adapt_ok() {
63        let epoch = Epoch(1);
64        let mut signer = fake_data::signers(1)[0].to_owned();
65        signer.party_id = "0".to_string();
66        let message = ToRegisterSignerMessageAdapter::try_adapt((epoch, signer)).unwrap();
67
68        assert_eq!("0".to_string(), message.party_id);
69    }
70}