1use crate::geometry::AbsoluteAxis;
4
5#[derive(Copy, Clone, PartialEq, Eq, Debug)]
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12pub enum FlexWrap {
13 NoWrap,
15 Wrap,
17 WrapReverse,
19}
20
21impl Default for FlexWrap {
22 fn default() -> Self {
23 Self::NoWrap
24 }
25}
26
27#[derive(Copy, Clone, PartialEq, Eq, Debug)]
39#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
40pub enum FlexDirection {
41 Row,
45 Column,
49 RowReverse,
53 ColumnReverse,
57}
58
59impl Default for FlexDirection {
60 fn default() -> Self {
61 Self::Row
62 }
63}
64
65impl FlexDirection {
66 #[inline]
67 pub(crate) fn is_row(self) -> bool {
69 matches!(self, Self::Row | Self::RowReverse)
70 }
71
72 #[inline]
73 pub(crate) fn is_column(self) -> bool {
75 matches!(self, Self::Column | Self::ColumnReverse)
76 }
77
78 #[inline]
79 pub(crate) fn is_reverse(self) -> bool {
81 matches!(self, Self::RowReverse | Self::ColumnReverse)
82 }
83
84 #[inline]
85 pub(crate) fn main_axis(self) -> AbsoluteAxis {
87 match self {
88 Self::Row | Self::RowReverse => AbsoluteAxis::Horizontal,
89 Self::Column | Self::ColumnReverse => AbsoluteAxis::Vertical,
90 }
91 }
92
93 #[inline]
94 pub(crate) fn cross_axis(self) -> AbsoluteAxis {
96 match self {
97 Self::Row | Self::RowReverse => AbsoluteAxis::Vertical,
98 Self::Column | Self::ColumnReverse => AbsoluteAxis::Horizontal,
99 }
100 }
101}
102
103#[cfg(test)]
104mod tests {
105 mod test_flex_direction {
106 use crate::style::*;
107
108 #[test]
109 fn flex_direction_is_row() {
110 assert_eq!(FlexDirection::Row.is_row(), true);
111 assert_eq!(FlexDirection::RowReverse.is_row(), true);
112 assert_eq!(FlexDirection::Column.is_row(), false);
113 assert_eq!(FlexDirection::ColumnReverse.is_row(), false);
114 }
115
116 #[test]
117 fn flex_direction_is_column() {
118 assert_eq!(FlexDirection::Row.is_column(), false);
119 assert_eq!(FlexDirection::RowReverse.is_column(), false);
120 assert_eq!(FlexDirection::Column.is_column(), true);
121 assert_eq!(FlexDirection::ColumnReverse.is_column(), true);
122 }
123
124 #[test]
125 fn flex_direction_is_reverse() {
126 assert_eq!(FlexDirection::Row.is_reverse(), false);
127 assert_eq!(FlexDirection::RowReverse.is_reverse(), true);
128 assert_eq!(FlexDirection::Column.is_reverse(), false);
129 assert_eq!(FlexDirection::ColumnReverse.is_reverse(), true);
130 }
131 }
132}