use ::std::fmt;
use ::semver::Version;
use ::serde::Deserialize;
use ::serde::Serialize;
use crate::gen1::data::{Message, Party, TypeDeclaration};
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct VersionEvolution {
pub version: Version,
#[serde(flatten)]
pub checksum: Checksum,
pub declaration: Vec<(ChangeStatus, TypeDeclaration)>,
pub parties: Vec<(ChangeStatus, Party)>,
pub messages: Vec<MessageOperation>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ChangeStatus {
Unchanged { same_as: Version },
New,
Changed { previous: Version },
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum MessageOperation {
Unchanged { same_as: Version, typ: Message },
Convert {
parse_typ: Message,
target_version: Version,
target_typ: Message,
},
Implement { typ: Message },
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct Checksum {
value: String,
}
impl fmt::Display for Checksum {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.value)
}
}