pub const STATUSES: [&str; 5] = ["draft", "active", "superseded", "archived", "rejected"];
pub fn is_current(status: &str) -> bool {
matches!(status, "draft" | "active")
}
pub fn transition_allowed(from: &str, to: &str) -> bool {
from == to
|| matches!(
(from, to),
("draft", "active")
| ("draft", "rejected")
| ("draft", "archived")
| ("active", "superseded")
| ("active", "archived")
| ("superseded", "archived")
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn forward_only() {
assert!(transition_allowed("draft", "active"));
assert!(transition_allowed("active", "superseded"));
assert!(!transition_allowed("active", "draft"));
assert!(!transition_allowed("archived", "active"));
assert!(!transition_allowed("rejected", "active"));
}
}