mithril_signer/message_adapters/
to_register_signer_message.rs1use anyhow::Context;
2use mithril_common::{
3 StdResult,
4 entities::{Epoch, Signer},
5 messages::{RegisterSignerMessage, TryToMessageAdapter},
6};
7
8pub struct ToRegisterSignerMessageAdapter;
10
11impl TryToMessageAdapter<(Epoch, Signer), RegisterSignerMessage>
12 for ToRegisterSignerMessageAdapter
13{
14 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}