use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StateStatus {
Baseline,
Added,
Removed,
Unchanged,
Modified,
}
impl StateStatus {
pub fn is_drift(self) -> bool {
matches!(
self,
StateStatus::Added | StateStatus::Removed | StateStatus::Modified
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn drift_classification() {
assert!(StateStatus::Added.is_drift());
assert!(StateStatus::Removed.is_drift());
assert!(StateStatus::Modified.is_drift());
assert!(!StateStatus::Unchanged.is_drift());
assert!(!StateStatus::Baseline.is_drift());
}
#[test]
fn every_status_serializes_to_its_name() {
for (status, name) in [
(StateStatus::Baseline, "\"Baseline\""),
(StateStatus::Added, "\"Added\""),
(StateStatus::Removed, "\"Removed\""),
(StateStatus::Unchanged, "\"Unchanged\""),
(StateStatus::Modified, "\"Modified\""),
] {
assert_eq!(serde_json::to_string(&status).unwrap(), name);
}
}
}