#[derive(Debug, Clone)]
pub enum DeliveryMode {
Live { message_id: String },
Persisted { message_id: String },
}
impl DeliveryMode {
pub fn message_id(&self) -> &str {
match self {
Self::Live { message_id } | Self::Persisted { message_id } => message_id,
}
}
pub fn is_live(&self) -> bool {
matches!(self, Self::Live { .. })
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn delivery_mode_message_id_both_variants() {
let live = DeliveryMode::Live {
message_id: "live-msg-001".to_string(),
};
assert_eq!(live.message_id(), "live-msg-001", "Live variant message_id");
assert!(live.is_live(), "Live variant is_live() must be true");
let persisted = DeliveryMode::Persisted {
message_id: "http-msg-002".to_string(),
};
assert_eq!(
persisted.message_id(),
"http-msg-002",
"Persisted variant message_id"
);
assert!(!persisted.is_live(), "Persisted variant is_live() must be false");
}
#[test]
fn delivery_mode_clone() {
let live = DeliveryMode::Live {
message_id: "abc".to_string(),
};
let cloned = live.clone();
assert_eq!(live.message_id(), cloned.message_id());
let persisted = DeliveryMode::Persisted {
message_id: "xyz".to_string(),
};
let cloned_p = persisted.clone();
assert_eq!(persisted.message_id(), cloned_p.message_id());
}
#[test]
fn delivery_mode_debug() {
let live = DeliveryMode::Live {
message_id: "dbg-live".to_string(),
};
let s = format!("{live:?}");
assert!(s.contains("Live"), "Debug output must mention variant");
let persisted = DeliveryMode::Persisted {
message_id: "dbg-persisted".to_string(),
};
let s2 = format!("{persisted:?}");
assert!(s2.contains("Persisted"), "Debug output must mention variant");
}
}