forked from
oppi.li/at-advent
this repo has no description
1/// Decided to just go with an enum for the day. Seems a bit silly, but seemed the easiest way to do matches and translate from "1" to "One" etc without a dependency on a crate.
2#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
3pub enum Day {
4 One = 1,
5 Two = 2,
6 Three = 3,
7 Four = 4,
8 Five = 5,
9 Six = 6,
10 Seven = 7,
11 Eight = 8,
12 Nine = 9,
13 Ten = 10,
14 Eleven = 11,
15 Twelve = 12,
16 Thirteen = 13,
17 Fourteen = 14,
18 Fifteen = 15,
19 Sixteen = 16,
20 Seventeen = 17,
21 Eighteen = 18,
22 Nineteen = 19,
23 Twenty = 20,
24 TwentyOne = 21,
25 TwentyTwo = 22,
26 TwentyThree = 23,
27 TwentyFour = 24,
28 TwentyFive = 25,
29}
30
31impl From<Day> for u8 {
32 fn from(day: Day) -> Self {
33 match day {
34 Day::One => 1,
35 Day::Two => 2,
36 Day::Three => 3,
37 Day::Four => 4,
38 Day::Five => 5,
39 Day::Six => 6,
40 Day::Seven => 7,
41 Day::Eight => 8,
42 Day::Nine => 9,
43 Day::Ten => 10,
44 Day::Eleven => 11,
45 Day::Twelve => 12,
46 Day::Thirteen => 13,
47 Day::Fourteen => 14,
48 Day::Fifteen => 15,
49 Day::Sixteen => 16,
50 Day::Seventeen => 17,
51 Day::Eighteen => 18,
52 Day::Nineteen => 19,
53 Day::Twenty => 20,
54 Day::TwentyOne => 21,
55 Day::TwentyTwo => 22,
56 Day::TwentyThree => 23,
57 Day::TwentyFour => 24,
58 Day::TwentyFive => 25,
59 }
60 }
61}
62
63impl core::fmt::Display for Day {
64 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
65 f.write_str(match self {
66 Day::One => "One",
67 Day::Two => "Two",
68 Day::Three => "Three",
69 Day::Four => "Four",
70 Day::Five => "Five",
71 Day::Six => "Six",
72 Day::Seven => "Seven",
73 Day::Eight => "Eight",
74 Day::Nine => "Nine",
75 Day::Ten => "Ten",
76 Day::Eleven => "Eleven",
77 Day::Twelve => "Twelve",
78 Day::Thirteen => "Thirteen",
79 Day::Fourteen => "Fourteen",
80 Day::Fifteen => "Fifteen",
81 Day::Sixteen => "Sixteen",
82 Day::Seventeen => "Seventeen",
83 Day::Eighteen => "Eighteen",
84 Day::Nineteen => "Nineteen",
85 Day::Twenty => "Twenty",
86 Day::TwentyOne => "TwentyOne",
87 Day::TwentyTwo => "TwentyTwo",
88 Day::TwentyThree => "TwentyThree",
89 Day::TwentyFour => "TwentyFour",
90 Day::TwentyFive => "TwentyFive",
91 })
92 }
93}
94
95impl From<Day> for String {
96 fn from(day: Day) -> Self {
97 day.to_string()
98 }
99}
100
101impl core::convert::From<u8> for Day {
102 fn from(value: u8) -> Self {
103 match value {
104 1 => Day::One,
105 2 => Day::Two,
106 3 => Day::Three,
107 4 => Day::Four,
108 5 => Day::Five,
109 6 => Day::Six,
110 7 => Day::Seven,
111 8 => Day::Eight,
112 9 => Day::Nine,
113 10 => Day::Ten,
114 11 => Day::Eleven,
115 12 => Day::Twelve,
116 13 => Day::Thirteen,
117 14 => Day::Fourteen,
118 15 => Day::Fifteen,
119 16 => Day::Sixteen,
120 17 => Day::Seventeen,
121 18 => Day::Eighteen,
122 19 => Day::Nineteen,
123 20 => Day::Twenty,
124 21 => Day::TwentyOne,
125 22 => Day::TwentyTwo,
126 23 => Day::TwentyThree,
127 24 => Day::TwentyFour,
128 25 => Day::TwentyFive,
129 _ => panic!("day out of range (1..=25)"),
130 }
131 }
132}
133
134impl core::convert::From<&str> for Day {
135 fn from(s: &str) -> Self {
136 match s {
137 "One" => Day::One,
138 "Two" => Day::Two,
139 "Three" => Day::Three,
140 "Four" => Day::Four,
141 "Five" => Day::Five,
142 "Six" => Day::Six,
143 "Seven" => Day::Seven,
144 "Eight" => Day::Eight,
145 "Nine" => Day::Nine,
146 "Ten" => Day::Ten,
147 "Eleven" => Day::Eleven,
148 "Twelve" => Day::Twelve,
149 "Thirteen" => Day::Thirteen,
150 "Fourteen" => Day::Fourteen,
151 "Fifteen" => Day::Fifteen,
152 "Sixteen" => Day::Sixteen,
153 "Seventeen" => Day::Seventeen,
154 "Eighteen" => Day::Eighteen,
155 "Nineteen" => Day::Nineteen,
156 "Twenty" => Day::Twenty,
157 "TwentyOne" => Day::TwentyOne,
158 "TwentyTwo" => Day::TwentyTwo,
159 "TwentyThree" => Day::TwentyThree,
160 "TwentyFour" => Day::TwentyFour,
161 "TwentyFive" => Day::TwentyFive,
162 _ => panic!("unknown day string"),
163 }
164 }
165}
166
167impl core::convert::From<String> for Day {
168 fn from(value: String) -> Self {
169 Day::from(value.as_str())
170 }
171}