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_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}