weekday/
num_traits.rs

1use crate::{Weekday, WEEKDAYS, WEEKDAY_N_MAX, WEEKDAY_N_MIN};
2
3const WEEKDAY_N_MIN_I64: i64 = WEEKDAY_N_MIN as i64;
4const WEEKDAY_N_MAX_I64: i64 = WEEKDAY_N_MAX as i64;
5const WEEKDAY_N_MIN_U64: u64 = WEEKDAY_N_MIN as u64;
6const WEEKDAY_N_MAX_U64: u64 = WEEKDAY_N_MAX as u64;
7
8impl num_traits::FromPrimitive for Weekday {
9    #[inline]
10    fn from_i64(n: i64) -> Option<Weekday> {
11        match n {
12            WEEKDAY_N_MIN_I64..=WEEKDAY_N_MAX_I64 => Some(WEEKDAYS[(n - 1) as usize].to_owned()),
13            _ => None,
14        }
15    }
16
17    #[inline]
18    fn from_u64(n: u64) -> Option<Weekday> {
19        match n {
20            WEEKDAY_N_MIN_U64..=WEEKDAY_N_MAX_U64 => Some(WEEKDAYS[(n - 1) as usize].to_owned()),
21            _ => None,
22        }
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    use num_traits::FromPrimitive as _;
31
32    #[test]
33    fn simple() {
34        assert_eq!(Weekday::from_usize(0), None);
35        assert_eq!(Weekday::from_usize(1), Some(Weekday::Mon));
36        assert_eq!(Weekday::from_usize(7), Some(Weekday::Sun));
37        assert_eq!(Weekday::from_usize(8), None);
38    }
39}