use crate::model::{AdrStatus, RfcPhase, RfcStatus, WorkItemStatus};
pub fn is_valid_status_transition(from: RfcStatus, to: RfcStatus) -> bool {
matches!(
(from, to),
(RfcStatus::Draft, RfcStatus::Normative) | (RfcStatus::Normative, RfcStatus::Deprecated)
)
}
pub fn is_valid_phase_transition(from: RfcPhase, to: RfcPhase) -> bool {
matches!(
(from, to),
(RfcPhase::Spec, RfcPhase::Impl)
| (RfcPhase::Impl, RfcPhase::Test)
| (RfcPhase::Test, RfcPhase::Stable)
)
}
pub fn is_valid_adr_transition(from: AdrStatus, to: AdrStatus) -> bool {
matches!(
(from, to),
(AdrStatus::Proposed, AdrStatus::Accepted)
| (AdrStatus::Proposed, AdrStatus::Rejected)
| (AdrStatus::Accepted, AdrStatus::Superseded)
)
}
pub fn is_valid_work_transition(from: WorkItemStatus, to: WorkItemStatus) -> bool {
matches!(
(from, to),
(WorkItemStatus::Queue, WorkItemStatus::Active)
| (WorkItemStatus::Active, WorkItemStatus::Done)
| (WorkItemStatus::Queue, WorkItemStatus::Cancelled)
| (WorkItemStatus::Active, WorkItemStatus::Cancelled)
)
}
#[cfg(test)]
mod tests;