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