#![allow(deprecated)]
use serde::{Deserialize, Serialize};
use crate::entities::{Epoch, ProtocolParameters};
use crate::messages::{CardanoDbBeaconMessagePart, SignedEntityTypeMessagePart, SignerMessagePart};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[deprecated(
since = "0.4.63",
note = "Exists only for backward-compatibility, will be removed in the future"
)]
pub struct CertificatePendingMessage {
pub epoch: Epoch,
#[deprecated(since = "0.3.25", note = "use epoch instead")]
#[serde(skip_serializing_if = "Option::is_none")]
pub beacon: Option<CardanoDbBeaconMessagePart>,
#[serde(rename = "entity_type")]
pub signed_entity_type: SignedEntityTypeMessagePart,
#[deprecated(
since = "0.4.47",
note = "Exist only for backward-compatibility, will be removed in the future"
)]
#[serde(rename = "protocol")]
pub protocol_parameters: ProtocolParameters,
#[deprecated(
since = "0.4.47",
note = "Exist only for backward-compatibility, will be removed in the future"
)]
#[serde(rename = "next_protocol")]
pub next_protocol_parameters: ProtocolParameters,
#[deprecated(
since = "0.4.47",
note = "Exist only for backward-compatibility, will be removed in the future"
)]
pub signers: Vec<SignerMessagePart>,
#[deprecated(
since = "0.4.47",
note = "Exist only for backward-compatibility, will be removed in the future"
)]
pub next_signers: Vec<SignerMessagePart>,
}
impl CertificatePendingMessage {
cfg_test_tools! {
pub fn dummy() -> Self {
let epoch = Epoch(5);
#[allow(deprecated)]
Self {
epoch,
beacon: None,
signed_entity_type: SignedEntityTypeMessagePart::MithrilStakeDistribution(epoch),
protocol_parameters: ProtocolParameters {
k: 5,
m: 100,
phi_f: 0.65,
},
next_protocol_parameters: ProtocolParameters {
k: 50,
m: 1000,
phi_f: 0.65,
},
signers: [SignerMessagePart::dummy()].to_vec(),
next_signers: [SignerMessagePart::dummy()].to_vec(),
}
}
}
}
#[cfg(test)]
mod tests {
use crate::entities::Epoch;
use super::*;
const ACTUAL_JSON: &str = r#"{
"epoch": 86,
"beacon": {
"network": "",
"epoch": 0,
"immutable_file_number": 0
},
"entity_type": {
"CardanoImmutableFilesFull": {
"network": "preview",
"epoch": 86,
"immutable_file_number": 1728
}
},
"protocol": {
"k": 5,
"m": 100,
"phi_f": 0.65
},
"next_protocol": {
"k": 50,
"m": 1000,
"phi_f": 0.65
},
"signers": [
{
"party_id": "123",
"verification_key": "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d"
}
],
"next_signers": [
{
"party_id": "123",
"verification_key": "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d"
}
]
}"#;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CertificatePendingMessageUntilV0_1_25 {
pub epoch: Epoch,
pub beacon: CardanoDbBeaconMessagePart,
#[serde(rename = "entity_type")]
pub signed_entity_type: SignedEntityTypeMessagePart,
#[serde(rename = "protocol")]
pub protocol_parameters: ProtocolParameters,
#[serde(rename = "next_protocol")]
pub next_protocol_parameters: ProtocolParameters,
pub signers: Vec<SignerMessagePart>,
pub next_signers: Vec<SignerMessagePart>,
}
fn golden_message_until_open_api_0_1_25() -> CertificatePendingMessageUntilV0_1_25 {
let beacon = CardanoDbBeaconMessagePart {
network: Some("preview".to_string()),
epoch: Epoch(86),
immutable_file_number: 1728,
};
let deprecated_beacon = CardanoDbBeaconMessagePart {
network: Some("".to_string()),
epoch: Epoch(0),
immutable_file_number: 0,
};
CertificatePendingMessageUntilV0_1_25 {
epoch: beacon.epoch,
beacon: deprecated_beacon,
signed_entity_type: SignedEntityTypeMessagePart::CardanoImmutableFilesFull(beacon),
protocol_parameters: ProtocolParameters {
k: 5,
m: 100,
phi_f: 0.65,
},
next_protocol_parameters: ProtocolParameters {
k: 50,
m: 1000,
phi_f: 0.65,
},
signers: vec![
SignerMessagePart {
party_id: "123".to_string(),
verification_key: "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d".to_string(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None
}
],
next_signers: vec![
SignerMessagePart {
party_id: "123".to_string(),
verification_key: "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d".to_string(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None
}
],
}
}
fn golden_actual_message() -> CertificatePendingMessage {
let beacon = CardanoDbBeaconMessagePart {
network: Some("preview".to_string()),
epoch: Epoch(86),
immutable_file_number: 1728,
};
let deprecated_beacon = CardanoDbBeaconMessagePart {
network: Some("".to_string()),
epoch: Epoch(0),
immutable_file_number: 0,
};
#[allow(deprecated)]
CertificatePendingMessage {
epoch: beacon.epoch,
beacon: Some(deprecated_beacon),
signed_entity_type: SignedEntityTypeMessagePart::CardanoImmutableFilesFull(beacon),
protocol_parameters: ProtocolParameters {
k: 5,
m: 100,
phi_f: 0.65,
},
next_protocol_parameters: ProtocolParameters {
k: 50,
m: 1000,
phi_f: 0.65,
},
signers: vec![
SignerMessagePart {
party_id: "123".to_string(),
verification_key: "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d".to_string(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None
}
],
next_signers: vec![
SignerMessagePart {
party_id: "123".to_string(),
verification_key: "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d".to_string(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None
}
],
}
}
#[test]
fn test_actual_json_deserialized_into_message_supported_until_open_api_0_1_25() {
let json = ACTUAL_JSON;
let message: CertificatePendingMessageUntilV0_1_25 = serde_json::from_str(json).unwrap();
assert_eq!(golden_message_until_open_api_0_1_25(), message);
}
#[test]
fn test_actual_json_deserialized_into_actual_message() {
let json = ACTUAL_JSON;
let message: CertificatePendingMessage = serde_json::from_str(json).unwrap();
assert_eq!(golden_actual_message(), message);
}
#[test]
fn test_json_next_version_deserialized_into_actual_message() {
let next_json = r#"{
"epoch": 86,
"entity_type": {
"CardanoImmutableFilesFull": {
"epoch": 86,
"immutable_file_number": 1728
}
},
"protocol": {
"k": 5,
"m": 100,
"phi_f": 0.65
},
"next_protocol": {
"k": 50,
"m": 1000,
"phi_f": 0.65
},
"signers": [
{
"party_id": "123",
"verification_key": "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d"
}
],
"next_signers": [
{
"party_id": "123",
"verification_key": "7b22766b223a5b3134332c3136312c3235352c34382c37382c35372c3230342c3232302c32352c3232312c3136342c3235322c3234382c31342c35362c3132362c3138362c3133352c3232382c3138382c3134352c3138312c35322c3230302c39372c39392c3231332c34362c302c3139392c3139332c38392c3138372c38382c32392c3133352c3137332c3234342c38362c33362c38332c35342c36372c3136342c362c3133372c39342c37322c362c3130352c3132382c3132382c39332c34382c3137362c31312c342c3234362c3133382c34382c3138302c3133332c39302c3134322c3139322c32342c3139332c3131312c3134322c33312c37362c3131312c3131302c3233342c3135332c39302c3230382c3139322c33312c3132342c39352c3130322c34392c3135382c39392c35322c3232302c3136352c39342c3235312c36382c36392c3132312c31362c3232342c3139345d2c22706f70223a5b3136382c35302c3233332c3139332c31352c3133362c36352c37322c3132332c3134382c3132392c3137362c33382c3139382c3230392c34372c32382c3230342c3137362c3134342c35372c3235312c34322c32382c36362c37362c38392c39372c3135382c36332c35342c3139382c3139342c3137362c3133352c3232312c31342c3138352c3139372c3232352c3230322c39382c3234332c37342c3233332c3232352c3134332c3135312c3134372c3137372c3137302c3131372c36362c3136352c36362c36322c33332c3231362c3233322c37352c36382c3131342c3139352c32322c3130302c36352c34342c3139382c342c3136362c3130322c3233332c3235332c3234302c35392c3137352c36302c3131372c3134322c3131342c3134302c3132322c31372c38372c3131302c3138372c312c31372c31302c3139352c3135342c31332c3234392c38362c35342c3232365d7d"
}
]
}"#;
let message: CertificatePendingMessage = serde_json::from_str(next_json).unwrap();
#[allow(deprecated)]
let golden_message = CertificatePendingMessage {
beacon: None,
signed_entity_type: SignedEntityTypeMessagePart::CardanoImmutableFilesFull(
CardanoDbBeaconMessagePart {
network: None,
epoch: Epoch(86),
immutable_file_number: 1728,
},
),
..golden_actual_message()
};
assert_eq!(golden_message, message);
}
}