mithril_signer/message_adapters/
from_epoch_settings.rs

1use anyhow::Context;
2use mithril_common::{
3    messages::{EpochSettingsMessage, SignerMessagePart, TryFromMessageAdapter},
4    StdResult,
5};
6
7use crate::entities::SignerEpochSettings;
8
9/// Adapter to convert [EpochSettingsMessage] to [SignerEpochSettings].
10pub struct FromEpochSettingsAdapter;
11
12impl TryFromMessageAdapter<EpochSettingsMessage, SignerEpochSettings> for FromEpochSettingsAdapter {
13    /// Method to convert.
14    fn try_adapt(message: EpochSettingsMessage) -> StdResult<SignerEpochSettings> {
15        let epoch_settings = SignerEpochSettings {
16            epoch: message.epoch,
17            registration_protocol_parameters: message.signer_registration_protocol_parameters,
18            current_signers: SignerMessagePart::try_into_signers(message.current_signers)
19                .with_context(|| "'FromMessageAdapter' can not convert the current signers")?,
20            next_signers: SignerMessagePart::try_into_signers(message.next_signers)
21                .with_context(|| "'FromMessageAdapter' can not convert the next signers")?,
22            cardano_transactions_signing_config: message.cardano_transactions_signing_config,
23            next_cardano_transactions_signing_config: message
24                .next_cardano_transactions_signing_config,
25        };
26        Ok(epoch_settings)
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn try_adapt_epoch_settings_message_to_entity() {
36        let message = EpochSettingsMessage::dummy();
37        let epoch = message.epoch;
38        let epoch_settings = FromEpochSettingsAdapter::try_adapt(message).unwrap();
39
40        assert_eq!(epoch, epoch_settings.epoch);
41    }
42}