mithril_signer/message_adapters/
from_epoch_settings.rs

1use anyhow::Context;
2use mithril_common::{
3    StdResult,
4    messages::{EpochSettingsMessage, SignerMessagePart, TryFromMessageAdapter},
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            current_signers: SignerMessagePart::try_into_signers(message.current_signers)
18                .with_context(|| "'FromMessageAdapter' can not convert the current signers")?,
19            next_signers: SignerMessagePart::try_into_signers(message.next_signers)
20                .with_context(|| "'FromMessageAdapter' can not convert the next signers")?,
21        };
22        Ok(epoch_settings)
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use mithril_common::test::double::Dummy;
29
30    use super::*;
31
32    #[test]
33    fn try_adapt_epoch_settings_message_to_entity() {
34        let message = EpochSettingsMessage::dummy();
35        let epoch = message.epoch;
36        let epoch_settings = FromEpochSettingsAdapter::try_adapt(message).unwrap();
37
38        assert_eq!(epoch, epoch_settings.epoch);
39    }
40}