#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum QualityLevel {
#[default]
High,
Medium,
Low,
}
impl PartialOrd for QualityLevel {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
Some(self.cmp(other))
}
}
impl Ord for QualityLevel {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
match (self, other) {
(QualityLevel::High, QualityLevel::High) => std::cmp::Ordering::Equal,
(QualityLevel::High, _) => std::cmp::Ordering::Greater,
(_, QualityLevel::High) => std::cmp::Ordering::Less,
(QualityLevel::Medium, QualityLevel::Medium) => std::cmp::Ordering::Equal,
(QualityLevel::Medium, QualityLevel::Low) => std::cmp::Ordering::Greater,
(QualityLevel::Low, QualityLevel::Medium) => std::cmp::Ordering::Less,
(QualityLevel::Low, QualityLevel::Low) => std::cmp::Ordering::Equal,
}
}
}
impl QualityLevel {
pub fn lower(&self) -> Option<Self> {
match self {
Self::High => Some(Self::Medium),
Self::Medium => Some(Self::Low),
Self::Low => None,
}
}
pub fn higher(&self) -> Option<Self> {
match self {
Self::Low => Some(Self::Medium),
Self::Medium => Some(Self::High),
Self::High => None,
}
}
}