chinese_format/gregorian/date/week_day.rs
1use super::WeekDayOutOfRange;
2
3/// The day of the week.
4///
5/// Each day can also be cast to its corresponding ordinal:
6///
7/// ```
8/// use chinese_format::{*, gregorian::*};
9///
10/// assert_eq!(WeekDay::Wednesday as u8, 3);
11/// ```
12#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
13pub enum WeekDay {
14 Sunday,
15 Monday,
16 Tuesday,
17 Wednesday,
18 Thursday,
19 Friday,
20 Saturday,
21}
22
23/// A fallible conversion from [u8] is available,
24/// provided that 0=Sunday and 6=Saturday:
25///
26/// ```
27/// use chinese_format::{*, gregorian::*};
28///
29/// # fn main() -> GenericResult<()> {
30///
31/// let day: WeekDay = 0.try_into()?;
32/// assert_eq!(day, WeekDay::Sunday);
33///
34/// let day: WeekDay = 1.try_into()?;
35/// assert_eq!(day, WeekDay::Monday);
36///
37/// let day: WeekDay = 2.try_into()?;
38/// assert_eq!(day, WeekDay::Tuesday);
39///
40/// let day: WeekDay = 3.try_into()?;
41/// assert_eq!(day, WeekDay::Wednesday);
42///
43/// let day: WeekDay = 4.try_into()?;
44/// assert_eq!(day, WeekDay::Thursday);
45///
46/// let day: WeekDay = 5.try_into()?;
47/// assert_eq!(day, WeekDay::Friday);
48///
49/// let day: WeekDay = 6.try_into()?;
50/// assert_eq!(day, WeekDay::Saturday);
51///
52/// let result: Result<WeekDay, WeekDayOutOfRange> = 7.try_into();
53/// assert_eq!(result, Err(WeekDayOutOfRange(7)));
54///
55/// # Ok(())
56/// # }
57/// ```
58impl TryFrom<u8> for WeekDay {
59 type Error = WeekDayOutOfRange;
60
61 fn try_from(value: u8) -> Result<Self, Self::Error> {
62 match value {
63 0 => Ok(Self::Sunday),
64 1 => Ok(Self::Monday),
65 2 => Ok(Self::Tuesday),
66 3 => Ok(Self::Wednesday),
67 4 => Ok(Self::Thursday),
68 5 => Ok(Self::Friday),
69 6 => Ok(Self::Saturday),
70 _ => Err(WeekDayOutOfRange(value)),
71 }
72 }
73}