tailwind_css_fixes/modules/sizing/
builder.rs1use super::*;
2
3impl SizingUnit {
4 pub fn parse(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
5 let px = |x| Ok(Self::Length(LengthUnit::px(x)));
6 match pattern {
7 ["min"] => Ok(Self::Min),
8 ["max"] => Ok(Self::Max),
9 ["auto"] => Ok(Self::Auto),
10 ["full"] => Ok(Self::Full),
11 ["fit"] => Ok(Self::Fit),
12 ["screen"] => Ok(Self::Screen),
13 ["0"] => px(0.0),
14 ["px"] => px(1.0),
15 [n] => Self::parse_arbitrary(&TailwindArbitrary::from(*n)),
16 [] => Self::parse_arbitrary(arbitrary),
17 _ => syntax_error!("Unknown sizing instructions: {}", pattern.join("-")),
18 }
19 }
20 pub fn parse_arbitrary(arbitrary: &TailwindArbitrary) -> Result<Self> {
21 Self::maybe_fraction(arbitrary).or_else(|_| Self::maybe_no_unit(arbitrary)).or_else(|_| Self::maybe_length(arbitrary))
22 }
28 #[inline]
29 fn maybe_length(arbitrary: &TailwindArbitrary) -> Result<Self> {
30 Ok(Self::Length(arbitrary.as_length_or_fraction()?))
31 }
32 #[inline]
33 fn maybe_no_unit(arbitrary: &TailwindArbitrary) -> Result<Self> {
34 let rem = |x| Ok(Self::Length(LengthUnit::em(x)));
35 rem(arbitrary.as_float()? / 4.0)
36 }
37 #[inline]
38 fn maybe_fraction(arbitrary: &TailwindArbitrary) -> Result<Self> {
39 let (a, b) = arbitrary.as_fraction()?;
40 Ok(Self::Fraction(a, b))
41 }
42}
43
44impl TailwindSizing {
45 #[inline]
46 pub fn parse_width(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
47 Ok(Self { kind: TailwindSizingKind::Width, size: SizingUnit::parse(pattern, arbitrary)? })
48 }
49 #[inline]
50 pub fn parse_width_max(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
51 Ok(Self { kind: TailwindSizingKind::MaxWidth, size: SizingUnit::parse(pattern, arbitrary)? })
52 }
53 #[inline]
54 pub fn parse_width_min(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
55 Ok(Self { kind: TailwindSizingKind::MinWidth, size: SizingUnit::parse(pattern, arbitrary)? })
56 }
57 #[inline]
58 pub fn parse_height(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
59 Ok(Self { kind: TailwindSizingKind::Height, size: SizingUnit::parse(pattern, arbitrary)? })
60 }
61 #[inline]
62 pub fn parse_height_max(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
63 Ok(Self { kind: TailwindSizingKind::MaxHeight, size: SizingUnit::parse(pattern, arbitrary)? })
64 }
65 #[inline]
66 pub fn parse_height_min(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
67 Ok(Self { kind: TailwindSizingKind::MinHeight, size: SizingUnit::parse(pattern, arbitrary)? })
68 }
69}