1use crate::{Hour, HOURS, HOUR_N_MAX, HOUR_N_MIN};
2
3const HOUR_N_MIN_I64: i64 = HOUR_N_MIN as i64;
4const HOUR_N_MAX_I64: i64 = HOUR_N_MAX as i64;
5const HOUR_N_MIN_U64: u64 = HOUR_N_MIN as u64;
6const HOUR_N_MAX_U64: u64 = HOUR_N_MAX as u64;
7
8impl num_traits::FromPrimitive for Hour {
9 #[inline]
10 fn from_i64(n: i64) -> Option<Hour> {
11 match n {
12 HOUR_N_MIN_I64..=HOUR_N_MAX_I64 => Some(HOURS[(n) as usize].to_owned()),
13 _ => None,
14 }
15 }
16
17 #[inline]
18 fn from_u64(n: u64) -> Option<Hour> {
19 match n {
20 HOUR_N_MIN_U64..=HOUR_N_MAX_U64 => Some(HOURS[(n) 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!(Hour::from_usize(0), Some(Hour::C0));
35 assert_eq!(Hour::from_usize(1), Some(Hour::C1));
36 assert_eq!(Hour::from_usize(23), Some(Hour::C23));
37 assert_eq!(Hour::from_usize(24), None);
38 }
39}