1use std::{borrow::Cow, collections::HashMap};
2
3use serde::Deserialize;
4
5#[derive(Deserialize, Debug)]
6#[serde(untagged)]
7pub enum LineHeightOpt<'a> {
8 LineHeight(LineHeight<'a>),
9 Str(&'a str),
10}
11
12#[derive(Deserialize, Debug, Default)]
13pub struct TailwindConfig<'a> {
14 #[serde(borrow)]
15 pub theme: TailwindTheme<'a>,
16 #[serde(alias = "darkMode")]
17 pub dark_mode: &'a str,
18}
19
20#[derive(Deserialize, Debug, Default)]
21pub struct TailwindTheme<'a> {
22 #[serde(borrow)]
23 pub screens: HashMap<&'a str, Screens<'a>>,
24 #[serde(borrow)]
25 pub spacing: HashMap<&'a str, &'a str>,
26 #[serde(borrow)]
27 pub space: HashMap<&'a str, &'a str>,
28 #[serde(borrow)]
29 pub cursor: HashMap<&'a str, &'a str>,
30 #[serde(borrow)]
31 pub flex: HashMap<&'a str, &'a str>,
32 #[serde(borrow, alias = "flexBasis")]
33 pub flex_basis: HashMap<&'a str, &'a str>,
34 #[serde(borrow, alias = "flexGrow")]
35 pub flex_grow: HashMap<&'a str, &'a str>,
36 #[serde(borrow, alias = "flexShrink")]
37 pub flex_shrink: HashMap<&'a str, &'a str>,
38 #[serde(borrow)]
39 pub gap: HashMap<&'a str, &'a str>,
40 #[serde(borrow)]
41 pub scale: HashMap<&'a str, &'a str>,
42 #[serde(borrow)]
43 pub colors: HashMap<&'a str, &'a str>,
44 #[serde(borrow, alias = "fontFamily")]
45 pub font_family: HashMap<&'a str, Vec<Cow<'a, str>>>,
46 #[serde(borrow, rename = "fontSize")]
47 pub font_size: HashMap<&'a str, (&'a str, LineHeightOpt<'a>)>,
48 #[serde(borrow, rename = "fontWeight")]
49 pub font_weight: HashMap<&'a str, &'a str>,
50 #[serde(borrow, rename = "borderRadius")]
51 pub border_radius: HashMap<&'a str, &'a str>,
52 #[serde(borrow, rename = "borderWidth")]
53 pub border_width: HashMap<&'a str, &'a str>,
54 #[serde(borrow, rename = "boxShadow")]
55 pub box_shadow: HashMap<&'a str, &'a str>,
56 #[serde(borrow, rename = "zIndex")]
57 pub z_index: HashMap<&'a str, &'a str>,
58 #[serde(borrow)]
59 pub columns: HashMap<&'a str, &'a str>,
60 #[serde(borrow)]
61 pub translate: HashMap<&'a str, &'a str>,
62 #[serde(borrow)]
63 pub width: HashMap<&'a str, &'a str>,
64 #[serde(borrow)]
65 pub height: HashMap<&'a str, &'a str>,
66 #[serde(borrow)]
67 pub rotate: HashMap<&'a str, &'a str>,
68 #[serde(borrow, alias = "letterSpacing")]
69 pub letter_spacing: HashMap<&'a str, &'a str>,
70 #[serde(borrow)]
71 pub blur: HashMap<&'a str, &'a str>,
72 #[serde(borrow)]
73 pub invert: HashMap<&'a str, &'a str>,
74 #[serde(borrow, alias = "ringWidth")]
75 pub ring_width: HashMap<&'a str, &'a str>,
76 #[serde(borrow, alias = "ringOffsetWidth")]
77 pub ring_offset_width: HashMap<&'a str, &'a str>,
78 #[serde(borrow)]
79 pub opacity: HashMap<&'a str, &'a str>,
80 #[serde(borrow)]
81 pub order: HashMap<&'a str, &'a str>,
82 #[serde(borrow)]
83 pub margin: HashMap<&'a str, &'a str>,
84 #[serde(borrow)]
85 pub padding: HashMap<&'a str, &'a str>,
86 #[serde(borrow, alias = "outlineOffset")]
87 pub outline_offset: HashMap<&'a str, &'a str>,
88 #[serde(borrow, alias = "outlineWidth")]
89 pub outline_width: HashMap<&'a str, &'a str>,
90 #[serde(borrow, alias = "backgroundImage")]
91 pub background_image: HashMap<&'a str, &'a str>,
92 #[serde(borrow, alias = "backgroundSize")]
93 pub background_size: HashMap<&'a str, &'a str>,
94 #[serde(borrow, alias = "backgroundPosition")]
95 pub background_position: HashMap<&'a str, &'a str>,
96
97 #[serde(borrow, rename = "gridTemplateRows")]
98 pub grid_template_rows: HashMap<&'a str, &'a str>,
99 #[serde(borrow, rename = "gridRow")]
100 pub grid_row: HashMap<&'a str, &'a str>,
101 #[serde(borrow, rename = "gridRowStart")]
102 pub grid_row_start: HashMap<&'a str, &'a str>,
103 #[serde(borrow, rename = "gridRowEnd")]
104 pub grid_row_end: HashMap<&'a str, &'a str>,
105 #[serde(borrow, rename = "gridTemplateColumns")]
106 pub grid_template_columns: HashMap<&'a str, &'a str>,
107 #[serde(borrow, rename = "gridColumn")]
108 pub grid_column: HashMap<&'a str, &'a str>,
109 #[serde(borrow, rename = "gridColumnStart")]
110 pub grid_column_start: HashMap<&'a str, &'a str>,
111 #[serde(borrow, rename = "gridColumnEnd")]
112 pub grid_column_end: HashMap<&'a str, &'a str>,
113
114 #[serde(borrow, rename = "transitionDelay")]
115 pub transition_delay: HashMap<&'a str, &'a str>,
116 #[serde(borrow, rename = "transitionDuration")]
117 pub transition_duration: HashMap<&'a str, &'a str>,
118 #[serde(borrow, rename = "transitionProperty")]
119 pub transition_property: HashMap<&'a str, &'a str>,
120 #[serde(borrow, rename = "transitionTimingFunction")]
121 pub transition_timing_function: HashMap<&'a str, &'a str>,
122
123 #[serde(borrow, alias = "divideWidth")]
124 pub divide_width: HashMap<&'a str, &'a str>,
125
126 #[serde(borrow, alias = "minHeight")]
127 pub min_height: HashMap<&'a str, &'a str>,
128 #[serde(borrow, alias = "minWidth")]
129 pub min_width: HashMap<&'a str, &'a str>,
130 #[serde(borrow, alias = "maxHeight")]
131 pub max_height: HashMap<&'a str, &'a str>,
132 #[serde(borrow, alias = "maxWidth")]
133 pub max_width: HashMap<&'a str, &'a str>,
134 #[serde(borrow, alias = "lineHeight")]
135 pub line_height: HashMap<&'a str, &'a str>,
136 #[serde(borrow, alias = "animation")]
137 pub animation: HashMap<&'a str, &'a str>,
138
139 #[serde(borrow, alias = "strokeWidth")]
140 pub stroke_width: HashMap<&'a str, &'a str>,
141
142 #[serde(borrow, alias = "backdropBlur")]
143 pub backdrop_blur: HashMap<&'a str, &'a str>,
144
145 #[serde(borrow, alias = "aspectRatio")]
146 pub aspect_ratio: HashMap<&'a str, &'a str>,
147
148 #[serde(borrow, alias = "textDecorationThickness")]
149 pub decoration_thickness: HashMap<&'a str, &'a str>,
150
151 #[serde(borrow, alias = "ringOpacity")]
152 pub ring_opacity: HashMap<&'a str, &'a str>,
153}
154
155#[derive(Deserialize, Debug)]
156#[serde(untagged)]
157pub enum Screens<'a> {
158 Min(&'a str),
159 Custom {
160 min: Option<&'a str>,
161 max: Option<&'a str>,
162 },
163}
164
165#[derive(Deserialize, Debug)]
166pub struct LineHeight<'a> {
167 #[serde(alias = "lineHeight")]
168 pub line_height: &'a str,
169}