#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum Period {
Overall,
Week,
Month,
ThreeMonth,
SixMonth,
TwelveMonth,
}
impl Period {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum TrackLimit {
Limited(u32),
Unlimited,
}
impl From<Option<u32>> for TrackLimit {
fn from(opt: Option<u32>) -> Self {
opt.map_or(Self::Unlimited, Self::Limited)
}
}
impl From<u32> for TrackLimit {
fn from(limit: u32) -> Self {
Self::Limited(limit)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_track_limit_from_option() {
let limited: TrackLimit = Some(100).into();
assert_eq!(limited, TrackLimit::Limited(100));
let unlimited: TrackLimit = None.into();
assert_eq!(unlimited, TrackLimit::Unlimited);
}
#[test]
fn test_track_limit_from_u32() {
let limited: TrackLimit = 50.into();
assert_eq!(limited, TrackLimit::Limited(50));
}
}