#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[non_exhaustive]
pub enum Disposition {
CommittedCheap,
CommittedInferred,
QueuedForAdjudication,
Contested,
PendingConflict,
PendingReview,
PendingLowConfidence,
Quarantined,
Superseded,
Invalidated,
Reinstated,
Rejected,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct WriteOutcome {
pub claim_ref: crate::identity::ClaimRef,
pub disposition: Disposition,
pub contested_with: Vec<crate::identity::ClaimRef>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn disposition_has_exactly_12_variants() {
let variants = [
Disposition::CommittedCheap,
Disposition::CommittedInferred,
Disposition::QueuedForAdjudication,
Disposition::Contested,
Disposition::PendingConflict,
Disposition::PendingReview,
Disposition::PendingLowConfidence,
Disposition::Quarantined,
Disposition::Superseded,
Disposition::Invalidated,
Disposition::Reinstated,
Disposition::Rejected,
];
assert_eq!(variants.len(), 12);
}
#[test]
fn disposition_equality() {
assert_eq!(Disposition::CommittedCheap, Disposition::CommittedCheap);
assert_ne!(Disposition::CommittedCheap, Disposition::Rejected);
}
#[test]
fn disposition_round_trip_serde() {
let d = Disposition::PendingReview;
let json = serde_json::to_string(&d).unwrap();
let back: Disposition = serde_json::from_str(&json).unwrap();
assert_eq!(d, back);
}
#[test]
fn all_dispositions_round_trip_serde() {
let variants = [
Disposition::CommittedCheap,
Disposition::CommittedInferred,
Disposition::QueuedForAdjudication,
Disposition::Contested,
Disposition::PendingConflict,
Disposition::PendingReview,
Disposition::PendingLowConfidence,
Disposition::Quarantined,
Disposition::Superseded,
Disposition::Invalidated,
Disposition::Reinstated,
Disposition::Rejected,
];
for d in &variants {
let json = serde_json::to_string(d).unwrap();
let back: Disposition = serde_json::from_str(&json).unwrap();
assert_eq!(d, &back);
}
}
}