Skip to main content

beuvy_runtime/utility/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4pub enum UtilityFontFamilyRole {
5    Sans,
6    Serif,
7    Mono,
8}
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11pub enum UtilityFontStyle {
12    Normal,
13    Italic,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
17pub enum UtilityTextTransform {
18    None,
19    Uppercase,
20    Lowercase,
21    Capitalize,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
25pub enum UtilityVal {
26    Auto,
27    Px(f32),
28    Percent(f32),
29    Vw(f32),
30    Vh(f32),
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
34pub enum UtilityFlexDirection {
35    Row,
36    Column,
37    RowReverse,
38    ColumnReverse,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
42pub enum UtilityJustifyContent {
43    FlexStart,
44    FlexEnd,
45    Center,
46    SpaceBetween,
47    SpaceAround,
48    SpaceEvenly,
49}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
52pub enum UtilityAlignItems {
53    FlexStart,
54    FlexEnd,
55    Center,
56    Baseline,
57    Stretch,
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
61pub enum UtilityAlignContent {
62    FlexStart,
63    FlexEnd,
64    Center,
65    Stretch,
66    SpaceBetween,
67    SpaceAround,
68    SpaceEvenly,
69}
70
71#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
72pub enum UtilityAlignSelf {
73    Auto,
74    FlexStart,
75    FlexEnd,
76    Center,
77    Baseline,
78    Stretch,
79}
80
81#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
82pub enum UtilityFlexWrap {
83    NoWrap,
84    Wrap,
85    WrapReverse,
86}
87
88#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
89pub enum UtilityOverflowAxis {
90    Visible,
91    Clip,
92    Hidden,
93    Scroll,
94}
95
96#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
97pub enum UtilityDisplay {
98    Flex,
99    Grid,
100    None,
101    Block,
102}
103
104#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
105pub enum UtilityPositionType {
106    Relative,
107    Absolute,
108}
109
110#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
111pub enum UtilityStateVariant {
112    Hover,
113    Active,
114    Focus,
115    Disabled,
116}
117
118#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
119pub enum UtilityTransitionProperty {
120    All,
121    Colors,
122}
123
124#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
125pub enum UtilityTransitionTiming {
126    Linear,
127    EaseIn,
128    EaseOut,
129    EaseInOut,
130}
131
132#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
133pub struct UtilityRect {
134    pub left: Option<UtilityVal>,
135    pub right: Option<UtilityVal>,
136    pub top: Option<UtilityVal>,
137    pub bottom: Option<UtilityVal>,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
141pub struct UtilityVisualStylePatch {
142    pub background_color: Option<String>,
143    pub text_color: Option<String>,
144    pub border_color: Option<String>,
145    pub outline_width: Option<UtilityVal>,
146    pub outline_color: Option<String>,
147    pub opacity: Option<f32>,
148    pub transition_property: Option<UtilityTransitionProperty>,
149    pub transition_duration_ms: Option<f32>,
150    pub transition_timing: Option<UtilityTransitionTiming>,
151}
152
153#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
154pub struct UtilityStylePatch {
155    pub width: Option<UtilityVal>,
156    pub height: Option<UtilityVal>,
157    pub min_width: Option<UtilityVal>,
158    pub min_height: Option<UtilityVal>,
159    pub max_width: Option<UtilityVal>,
160    pub max_height: Option<UtilityVal>,
161    pub flex_direction: Option<UtilityFlexDirection>,
162    pub justify_content: Option<UtilityJustifyContent>,
163    pub align_items: Option<UtilityAlignItems>,
164    pub align_content: Option<UtilityAlignContent>,
165    pub align_self: Option<UtilityAlignSelf>,
166    pub flex_wrap: Option<UtilityFlexWrap>,
167    pub flex_grow: Option<f32>,
168    pub flex_shrink: Option<f32>,
169    pub flex_basis: Option<UtilityVal>,
170    pub row_gap: Option<UtilityVal>,
171    pub column_gap: Option<UtilityVal>,
172    pub padding: Option<UtilityRect>,
173    pub margin: Option<UtilityRect>,
174    pub border: Option<UtilityRect>,
175    pub border_radius: Option<UtilityVal>,
176    pub overflow_x: Option<UtilityOverflowAxis>,
177    pub overflow_y: Option<UtilityOverflowAxis>,
178    pub display: Option<UtilityDisplay>,
179    pub position_type: Option<UtilityPositionType>,
180    pub left: Option<UtilityVal>,
181    pub right: Option<UtilityVal>,
182    pub top: Option<UtilityVal>,
183    pub bottom: Option<UtilityVal>,
184    pub font_family_role: Option<UtilityFontFamilyRole>,
185    pub font_size: Option<f32>,
186    pub font_weight: Option<u16>,
187    pub font_style: Option<UtilityFontStyle>,
188    pub line_height: Option<f32>,
189    pub letter_spacing_em: Option<f32>,
190    pub text_transform: Option<UtilityTextTransform>,
191    pub visual: UtilityVisualStylePatch,
192    pub hover: UtilityVisualStylePatch,
193    pub active: UtilityVisualStylePatch,
194    pub focus: UtilityVisualStylePatch,
195    pub disabled: UtilityVisualStylePatch,
196}
197
198#[derive(Debug, Clone, PartialEq, Eq)]
199pub struct ParseUtilityError {
200    pub token: String,
201    pub reason: String,
202}
203
204impl ParseUtilityError {
205    pub(crate) fn new(token: &str, reason: impl Into<String>) -> Self {
206        Self {
207            token: token.to_string(),
208            reason: reason.into(),
209        }
210    }
211}