1use core::fmt;
12
13use crate::to_css::ToCss;
14
15#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
19pub enum FlexDirection {
20 Row,
22 RowReverse,
24 Column,
26 ColumnReverse,
28}
29
30impl ToCss for FlexDirection {
31 fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
32 dest.write_str(match self {
33 FlexDirection::Row => "row",
34 FlexDirection::RowReverse => "row-reverse",
35 FlexDirection::Column => "column",
36 FlexDirection::ColumnReverse => "column-reverse",
37 })
38 }
39}
40
41#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
43pub enum FlexWrap {
44 Nowrap,
46 Wrap,
48 WrapReverse,
50}
51
52impl ToCss for FlexWrap {
53 fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
54 dest.write_str(match self {
55 FlexWrap::Nowrap => "nowrap",
56 FlexWrap::Wrap => "wrap",
57 FlexWrap::WrapReverse => "wrap-reverse",
58 })
59 }
60}
61
62#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
65pub enum JustifyContent {
66 Stretch,
68 FlexStart,
70 FlexEnd,
72 Center,
74 SpaceBetween,
76 SpaceAround,
78 SpaceEvenly,
80 Start,
82 End,
84}
85
86impl ToCss for JustifyContent {
87 fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
88 dest.write_str(match self {
89 JustifyContent::Stretch => "stretch",
90 JustifyContent::FlexStart => "flex-start",
91 JustifyContent::FlexEnd => "flex-end",
92 JustifyContent::Center => "center",
93 JustifyContent::SpaceBetween => "space-between",
94 JustifyContent::SpaceAround => "space-around",
95 JustifyContent::SpaceEvenly => "space-evenly",
96 JustifyContent::Start => "start",
97 JustifyContent::End => "end",
98 })
99 }
100}
101
102#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
104pub enum AlignItems {
105 Stretch,
107 FlexStart,
109 FlexEnd,
111 Center,
113 Baseline,
115 Start,
117 End,
119}
120
121impl ToCss for AlignItems {
122 fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
123 dest.write_str(match self {
124 AlignItems::Stretch => "stretch",
125 AlignItems::FlexStart => "flex-start",
126 AlignItems::FlexEnd => "flex-end",
127 AlignItems::Center => "center",
128 AlignItems::Baseline => "baseline",
129 AlignItems::Start => "start",
130 AlignItems::End => "end",
131 })
132 }
133}
134
135#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
138pub enum AlignSelf {
139 Auto,
141 Stretch,
143 FlexStart,
145 FlexEnd,
147 Center,
149 Baseline,
151 Start,
153 End,
155}
156
157impl ToCss for AlignSelf {
158 fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
159 dest.write_str(match self {
160 AlignSelf::Auto => "auto",
161 AlignSelf::Stretch => "stretch",
162 AlignSelf::FlexStart => "flex-start",
163 AlignSelf::FlexEnd => "flex-end",
164 AlignSelf::Center => "center",
165 AlignSelf::Baseline => "baseline",
166 AlignSelf::Start => "start",
167 AlignSelf::End => "end",
168 })
169 }
170}
171
172#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
175pub enum AlignContent {
176 Stretch,
178 FlexStart,
180 FlexEnd,
182 Center,
184 SpaceBetween,
186 SpaceAround,
188 SpaceEvenly,
190}
191
192impl ToCss for AlignContent {
193 fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
194 dest.write_str(match self {
195 AlignContent::Stretch => "stretch",
196 AlignContent::FlexStart => "flex-start",
197 AlignContent::FlexEnd => "flex-end",
198 AlignContent::Center => "center",
199 AlignContent::SpaceBetween => "space-between",
200 AlignContent::SpaceAround => "space-around",
201 AlignContent::SpaceEvenly => "space-evenly",
202 })
203 }
204}
205
206#[cfg(test)]
207mod tests {
208 use super::*;
209
210 #[test]
211 fn flex_direction_all() {
212 let cases = [
213 (FlexDirection::Row, "row"),
214 (FlexDirection::RowReverse, "row-reverse"),
215 (FlexDirection::Column, "column"),
216 (FlexDirection::ColumnReverse, "column-reverse"),
217 ];
218 for (k, expected) in cases {
219 assert_eq!(k.to_css_string(), expected);
220 }
221 }
222
223 #[test]
224 fn flex_wrap_all() {
225 let cases = [
226 (FlexWrap::Nowrap, "nowrap"),
227 (FlexWrap::Wrap, "wrap"),
228 (FlexWrap::WrapReverse, "wrap-reverse"),
229 ];
230 for (k, expected) in cases {
231 assert_eq!(k.to_css_string(), expected);
232 }
233 }
234
235 #[test]
236 fn justify_content_all() {
237 let cases = [
238 (JustifyContent::Stretch, "stretch"),
239 (JustifyContent::FlexStart, "flex-start"),
240 (JustifyContent::FlexEnd, "flex-end"),
241 (JustifyContent::Center, "center"),
242 (JustifyContent::SpaceBetween, "space-between"),
243 (JustifyContent::SpaceAround, "space-around"),
244 (JustifyContent::SpaceEvenly, "space-evenly"),
245 (JustifyContent::Start, "start"),
246 (JustifyContent::End, "end"),
247 ];
248 for (k, expected) in cases {
249 assert_eq!(k.to_css_string(), expected);
250 }
251 }
252
253 #[test]
254 fn align_items_all() {
255 let cases = [
256 (AlignItems::Stretch, "stretch"),
257 (AlignItems::FlexStart, "flex-start"),
258 (AlignItems::FlexEnd, "flex-end"),
259 (AlignItems::Center, "center"),
260 (AlignItems::Baseline, "baseline"),
261 (AlignItems::Start, "start"),
262 (AlignItems::End, "end"),
263 ];
264 for (k, expected) in cases {
265 assert_eq!(k.to_css_string(), expected);
266 }
267 }
268
269 #[test]
270 fn align_self_all() {
271 let cases = [
272 (AlignSelf::Auto, "auto"),
273 (AlignSelf::Stretch, "stretch"),
274 (AlignSelf::FlexStart, "flex-start"),
275 (AlignSelf::FlexEnd, "flex-end"),
276 (AlignSelf::Center, "center"),
277 (AlignSelf::Baseline, "baseline"),
278 (AlignSelf::Start, "start"),
279 (AlignSelf::End, "end"),
280 ];
281 for (k, expected) in cases {
282 assert_eq!(k.to_css_string(), expected);
283 }
284 }
285
286 #[test]
287 fn align_content_all() {
288 let cases = [
289 (AlignContent::Stretch, "stretch"),
290 (AlignContent::FlexStart, "flex-start"),
291 (AlignContent::FlexEnd, "flex-end"),
292 (AlignContent::Center, "center"),
293 (AlignContent::SpaceBetween, "space-between"),
294 (AlignContent::SpaceAround, "space-around"),
295 (AlignContent::SpaceEvenly, "space-evenly"),
296 ];
297 for (k, expected) in cases {
298 assert_eq!(k.to_css_string(), expected);
299 }
300 }
301}