tailwind_rs_core/utilities/sizing/
sizing_value.rs1use crate::utilities::sizing::{Fraction, GridFraction};
4use serde::{Deserialize, Serialize};
5use std::fmt;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum SizingValue {
10 Auto,
12 Full,
14 Screen,
16 Min,
18 Max,
20 Fit,
22 Fraction(Fraction),
24 GridFraction(GridFraction),
26 Integer(u32),
28 Px(u32),
30}
31
32impl fmt::Display for SizingValue {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 match self {
35 SizingValue::Auto => write!(f, "auto"),
36 SizingValue::Full => write!(f, "full"),
37 SizingValue::Screen => write!(f, "screen"),
38 SizingValue::Min => write!(f, "min"),
39 SizingValue::Max => write!(f, "max"),
40 SizingValue::Fit => write!(f, "fit"),
41 SizingValue::Fraction(fraction) => write!(f, "{}", fraction),
42 SizingValue::GridFraction(grid_fraction) => write!(f, "{}", grid_fraction),
43 SizingValue::Integer(value) => write!(f, "{}", value),
44 SizingValue::Px(value) => write!(f, "{}px", value),
45 }
46 }
47}
48
49impl SizingValue {
50 pub fn to_class_name(&self) -> String {
51 match self {
52 SizingValue::Auto => "auto".to_string(),
53 SizingValue::Full => "full".to_string(),
54 SizingValue::Screen => "screen".to_string(),
55 SizingValue::Min => "min".to_string(),
56 SizingValue::Max => "max".to_string(),
57 SizingValue::Fit => "fit".to_string(),
58 SizingValue::Fraction(fraction) => fraction.to_class_name(),
59 SizingValue::GridFraction(grid_fraction) => grid_fraction.to_class_name(),
60 SizingValue::Integer(value) => value.to_string(),
61 SizingValue::Px(value) => format!("{}px", value),
62 }
63 }
64
65 pub fn to_css_value(&self) -> String {
66 match self {
67 SizingValue::Auto => "auto".to_string(),
68 SizingValue::Full => "100%".to_string(),
69 SizingValue::Screen => "100vh".to_string(),
70 SizingValue::Min => "min-content".to_string(),
71 SizingValue::Max => "max-content".to_string(),
72 SizingValue::Fit => "fit-content".to_string(),
73 SizingValue::Fraction(fraction) => fraction.to_css_value(),
74 SizingValue::GridFraction(grid_fraction) => grid_fraction.to_css_value(),
75 SizingValue::Integer(value) => format!("{}rem", value * 4 / 16), SizingValue::Px(value) => format!("{}px", value),
77 }
78 }
79}
80
81#[cfg(test)]
82mod tests {
83 use super::*;
84
85 #[test]
86 fn test_sizing_value_display() {
87 assert_eq!(SizingValue::Auto.to_string(), "auto");
88 assert_eq!(SizingValue::Full.to_string(), "full");
89 assert_eq!(SizingValue::Integer(4).to_string(), "4");
90 }
91
92 #[test]
93 fn test_sizing_value_class_name() {
94 assert_eq!(SizingValue::Auto.to_class_name(), "auto");
95 assert_eq!(SizingValue::Full.to_class_name(), "full");
96 assert_eq!(SizingValue::Integer(4).to_class_name(), "4");
97 }
98
99 #[test]
100 fn test_sizing_value_css_value() {
101 assert_eq!(SizingValue::Auto.to_css_value(), "auto");
102 assert_eq!(SizingValue::Full.to_css_value(), "100%");
103 assert_eq!(SizingValue::Integer(4).to_css_value(), "1rem");
104 }
105}