elvis_core/value/
flex.rs

1use crate::value::Unit;
2
3/// `Flex` position
4#[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)]
5pub enum FlexPosition {
6    /// Flex center
7    Center,
8    /// Flex end
9    End,
10    /// Flex start
11    Start,
12}
13
14impl ToString for FlexPosition {
15    fn to_string(&self) -> String {
16        match self {
17            FlexPosition::Center => "center",
18            FlexPosition::End => "flex-end",
19            FlexPosition::Start => "flex-start",
20        }
21        .into()
22    }
23}
24
25impl Default for FlexPosition {
26    fn default() -> FlexPosition {
27        FlexPosition::Center
28    }
29}
30
31/// `Flex` Alignment
32#[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)]
33pub enum Alignment {
34    /// Align bottom-center
35    BottomCenter,
36    /// Align bottom-left
37    BottomLeft,
38    /// Align bottom-right
39    BottomRight,
40    /// Align center
41    Center,
42    /// Align center-left
43    CenterLeft,
44    /// Align center-right
45    CenterRight,
46    /// Align top-center
47    TopCenter,
48    /// Align top-left
49    TopLeft,
50    /// Align top-right
51    TopRight,
52}
53
54impl Default for Alignment {
55    fn default() -> Alignment {
56        Alignment::Center
57    }
58}
59
60impl ToString for Alignment {
61    fn to_string(&self) -> String {
62        let (ai, jc) = match self {
63            Alignment::BottomCenter => ("flex-end", "center"),
64            Alignment::BottomLeft => ("flex-end", "flex-start"),
65            Alignment::BottomRight => ("flex-end", "flex-end"),
66            Alignment::Center => ("center", "center"),
67            Alignment::CenterLeft => ("center", "flex-start"),
68            Alignment::CenterRight => ("center", "flex-end"),
69            Alignment::TopCenter => ("flex-start", "center"),
70            Alignment::TopLeft => ("flex-start", "flex-start"),
71            Alignment::TopRight => ("flex-start", "flex-end"),
72        };
73
74        format!("align-items: {}; justify-content: {};", ai, jc)
75    }
76}
77
78/// `flex-basis` property
79#[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)]
80pub enum FlexBasis {
81    /// Auto
82    Auto,
83    /// Fill the flex box
84    Inherit,
85    /// Fill the flex box
86    Fill,
87    /// Sizing max content
88    MaxContent,
89    /// Sizing min content
90    MinContent,
91    /// Fit content
92    FitContent,
93    /// Specify width
94    Number(Unit),
95}
96
97impl Default for FlexBasis {
98    fn default() -> FlexBasis {
99        FlexBasis::Inherit
100    }
101}
102
103impl ToString for FlexBasis {
104    fn to_string(&self) -> String {
105        match self {
106            FlexBasis::Auto => "auto".into(),
107            FlexBasis::Inherit => "inherit".into(),
108            FlexBasis::Fill => "fill".into(),
109            FlexBasis::FitContent => "fit-content".into(),
110            FlexBasis::MaxContent => "max-content".into(),
111            FlexBasis::MinContent => "min-content".into(),
112            FlexBasis::Number(u) => u.to_string(),
113        }
114    }
115}
116
117/// `flex-direction` property
118#[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)]
119pub enum FlexDirection {
120    /// The direction in which lines of text are stacked
121    Column,
122    /// Like `FlexDirection::Column`, but reversed
123    ColumnReverse,
124    /// The direction text is laid out in a line
125    Row,
126    /// Like `FlexDirection::Row`, but reversed
127    RowReverse,
128}
129
130impl Default for FlexDirection {
131    fn default() -> FlexDirection {
132        FlexDirection::Row
133    }
134}
135
136impl ToString for FlexDirection {
137    fn to_string(&self) -> String {
138        match self {
139            FlexDirection::Column => "column",
140            FlexDirection::ColumnReverse => "column-reverse",
141            FlexDirection::Row => "row",
142            FlexDirection::RowReverse => "row-reverse",
143        }
144        .to_string()
145    }
146}
147
148/// `flex-direction` property
149#[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)]
150pub enum FlexWrap {
151    /// Flex Wrap
152    Wrap,
153    /// Flex No Wrap
154    NoWrap,
155    /// Flex Wrap Reverse
156    WrapReverse,
157}
158
159impl Default for FlexWrap {
160    fn default() -> FlexWrap {
161        FlexWrap::Wrap
162    }
163}
164
165impl ToString for FlexWrap {
166    fn to_string(&self) -> String {
167        match self {
168            FlexWrap::Wrap => "wrap",
169            FlexWrap::NoWrap => "no-wrap",
170            FlexWrap::WrapReverse => "wrap-reverse",
171        }
172        .to_string()
173    }
174}