use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DefinitionDefectView {
pub severity: String,
pub locus: String,
pub defect: String,
pub blocking: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DefinitionAnalysisView {
pub definition_name: String,
pub definition_version: String,
pub publishable: bool,
pub definition_digest: Option<String>,
pub defects: Vec<DefinitionDefectView>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PublishedDefinitionView {
pub name: String,
pub version: String,
pub digest: String,
pub already_published: bool,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn an_analysis_survives_the_wire() {
let analysis = DefinitionAnalysisView {
definition_name: "scope_discovery".to_owned(),
definition_version: "1.0".to_owned(),
publishable: false,
definition_digest: None,
defects: vec![DefinitionDefectView {
severity: "error".to_owned(),
locus: "state `ORPHAN`".to_owned(),
defect: "state is unreachable".to_owned(),
blocking: true,
}],
};
let bytes = serde_json::to_vec(&analysis).expect("serializes");
assert_eq!(
serde_json::from_slice::<DefinitionAnalysisView>(&bytes).expect("deserializes"),
analysis
);
}
#[test]
fn a_publication_names_what_an_instance_will_bind_to() {
let published = PublishedDefinitionView {
name: "scope_discovery".to_owned(),
version: "1.0".to_owned(),
digest: "abc123".to_owned(),
already_published: false,
};
assert!(
!published.digest.is_empty(),
"a publication without a digest cannot be bound to, only believed"
);
}
}