use serde::{Deserialize, Serialize};
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Serialize, Deserialize,
)]
pub enum Severity {
Low,
#[default]
Medium,
High,
Critical,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
pub enum RelatesKind {
#[default]
General,
Duplicates,
MentionedIn,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_severity_default_is_medium() {
assert_eq!(Severity::default(), Severity::Medium);
}
#[test]
fn test_severity_orders_low_medium_high_critical() {
assert!(Severity::Low < Severity::Medium);
assert!(Severity::Medium < Severity::High);
assert!(Severity::High < Severity::Critical);
}
#[test]
fn test_severity_serde_round_trips_every_variant() {
for variant in [
Severity::Low,
Severity::Medium,
Severity::High,
Severity::Critical,
] {
let json = serde_json::to_string(&variant).unwrap();
let back: Severity = serde_json::from_str(&json).unwrap();
assert_eq!(back, variant, "variant {variant:?} did not round-trip");
}
}
#[test]
fn test_severity_serde_wire_names_are_pascal_case() {
assert_eq!(serde_json::to_string(&Severity::Low).unwrap(), "\"Low\"");
assert_eq!(
serde_json::to_string(&Severity::Critical).unwrap(),
"\"Critical\""
);
}
#[test]
fn test_relates_kind_default_is_general() {
assert_eq!(RelatesKind::default(), RelatesKind::General);
}
#[test]
fn test_relates_kind_serde_round_trips_every_variant() {
for variant in [
RelatesKind::General,
RelatesKind::Duplicates,
RelatesKind::MentionedIn,
] {
let json = serde_json::to_string(&variant).unwrap();
let back: RelatesKind = serde_json::from_str(&json).unwrap();
assert_eq!(back, variant, "variant {variant:?} did not round-trip");
}
}
#[test]
fn test_relates_kind_serde_wire_names_are_pascal_case() {
assert_eq!(
serde_json::to_string(&RelatesKind::General).unwrap(),
"\"General\""
);
assert_eq!(
serde_json::to_string(&RelatesKind::MentionedIn).unwrap(),
"\"MentionedIn\""
);
}
}