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: signer.verification_key.try_into().with_context(|| {
20                format!(
21                    "'ToRegisterSignerMessageAdapter' can not convert the verification key: '{:?}'",
22                    signer.verification_key
23                )
24            })?,
25            verification_key_signature: match signer.verification_key_signature {
26                Some(k) => Some(k.try_into().with_context(|| {
27                    format!(
28                        "'ToRegisterSignerMessageAdapter' can not convert the verification key signature: '{:?}'",
29                        signer.verification_key_signature
30                    )
31                })?),
32                None => None,
33            },
34            operational_certificate: match signer.operational_certificate {
35                Some(o) => Some(o.try_into().with_context(|| {
36                    "'ToRegisterSignerMessageAdapter' can not convert the operational certificate"
37                })?),
38                None => None,
39            },
40            kes_evolutions: signer.kes_evolutions,
41        };
42
43        Ok(message)
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use mithril_common::test::double::fake_data;
50
51    use super::*;
52
53    #[test]
54    fn adapt_ok() {
55        let epoch = Epoch(1);
56        let mut signer = fake_data::signers(1)[0].to_owned();
57        signer.party_id = "0".to_string();
58        let message = ToRegisterSignerMessageAdapter::try_adapt((epoch, signer)).unwrap();
59
60        assert_eq!("0".to_string(), message.party_id);
61    }
62}