mithril_aggregator/database/record/
epoch_settings.rs1use mithril_common::entities::{
2 CardanoBlocksTransactionsSigningConfig, CardanoTransactionsSigningConfig, Epoch,
3 ProtocolParameters,
4};
5use mithril_persistence::sqlite::{HydrationError, Projection, SqLiteEntity};
6
7use crate::entities::AggregatorEpochSettings;
8
9#[derive(Debug, PartialEq, Clone)]
11pub struct EpochSettingsRecord {
12 pub epoch_settings_id: Epoch,
14
15 pub protocol_parameters: ProtocolParameters,
17
18 pub cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
20
21 pub cardano_blocks_transactions_signing_config: Option<CardanoBlocksTransactionsSigningConfig>,
23}
24
25impl From<EpochSettingsRecord> for AggregatorEpochSettings {
26 fn from(other: EpochSettingsRecord) -> Self {
27 Self {
28 protocol_parameters: other.protocol_parameters,
29 cardano_transactions_signing_config: other.cardano_transactions_signing_config,
30 cardano_blocks_transactions_signing_config: other
31 .cardano_blocks_transactions_signing_config,
32 }
33 }
34}
35
36impl SqLiteEntity for EpochSettingsRecord {
37 fn hydrate(row: sqlite::Row) -> Result<Self, HydrationError>
38 where
39 Self: Sized,
40 {
41 let epoch_settings_id_int = row.read::<i64, _>(0);
42 let protocol_parameters_string = &row.read::<&str, _>(1);
43 let cardano_transactions_signing_config_string = &row.read::<Option<&str>, _>(2);
44 let cardano_blocks_transactions_signing_config_string = &row.read::<Option<&str>, _>(3);
45
46 let epoch_settings_record = Self {
47 epoch_settings_id: Epoch(epoch_settings_id_int.try_into().map_err(|e| {
48 HydrationError::InvalidData(format!(
49 "Could not cast i64 ({epoch_settings_id_int}) to u64. Error: '{e}'"
50 ))
51 })?),
52 protocol_parameters: serde_json::from_str(protocol_parameters_string).map_err(
53 |e| {
54 HydrationError::InvalidData(format!(
55 "Could not turn string '{protocol_parameters_string}' to ProtocolParameters. Error: {e}"
56 ))
57 },
58 )?,
59 cardano_transactions_signing_config: cardano_transactions_signing_config_string.map(|config| serde_json::from_str(config).map_err(
60 |e| {
61 HydrationError::InvalidData(format!(
62 "Could not turn string '{config}' to CardanoTransactionsSigningConfig. Error: {e}"
63 ))
64 },
65 )).transpose()?,
66 cardano_blocks_transactions_signing_config: cardano_blocks_transactions_signing_config_string.map(|config| serde_json::from_str(config).map_err(
67 |e| {
68 HydrationError::InvalidData(format!(
69 "Could not turn string '{config}' to CardanoBlocksTransactionsSigningConfig. Error: {e}"
70 ))
71 },
72 )).transpose()?,
73
74 };
75
76 Ok(epoch_settings_record)
77 }
78
79 fn get_projection() -> Projection {
80 let mut projection = Projection::default();
81 projection.add_field(
82 "epoch_setting_id",
83 "{:epoch_setting:}.epoch_setting_id",
84 "integer",
85 );
86 projection.add_field(
87 "protocol_parameters",
88 "{:epoch_setting:}.protocol_parameters",
89 "text",
90 );
91 projection.add_field(
92 "cardano_transactions_signing_config",
93 "{:epoch_setting:}.cardano_transactions_signing_config",
94 "text",
95 );
96 projection.add_field(
97 "cardano_blocks_transactions_signing_config",
98 "{:epoch_setting:}.cardano_blocks_transactions_signing_config",
99 "text",
100 );
101
102 projection
103 }
104}