#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum CreationOrder {
#[default]
Untracked,
Tracked,
Indexed,
}
impl CreationOrder {
pub fn is_tracked(self) -> bool {
!matches!(self, Self::Untracked)
}
pub fn is_indexed(self) -> bool {
matches!(self, Self::Indexed)
}
pub fn from_flags(tracked: bool, indexed: bool) -> Self {
match (tracked, indexed) {
(true, true) => Self::Indexed,
(true, false) => Self::Tracked,
(false, _) => Self::Untracked,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn indexed_implies_tracked() {
assert!(CreationOrder::Indexed.is_tracked());
assert!(CreationOrder::Indexed.is_indexed());
assert!(CreationOrder::Tracked.is_tracked());
assert!(!CreationOrder::Tracked.is_indexed());
assert!(!CreationOrder::Untracked.is_tracked());
assert!(!CreationOrder::Untracked.is_indexed());
}
#[test]
fn a_lone_indexed_flag_reads_as_untracked() {
assert_eq!(
CreationOrder::from_flags(false, true),
CreationOrder::Untracked
);
assert_eq!(
CreationOrder::from_flags(false, false),
CreationOrder::Untracked
);
assert_eq!(
CreationOrder::from_flags(true, false),
CreationOrder::Tracked
);
assert_eq!(
CreationOrder::from_flags(true, true),
CreationOrder::Indexed
);
}
#[test]
fn the_default_is_untracked() {
assert_eq!(CreationOrder::default(), CreationOrder::Untracked);
}
}