tailwind_css/modules/flexbox/flex/flex_wrap/
mod.rs

1use super::*;
2
3#[doc=include_str!("readme.md")]
4#[derive(Debug, Clone)]
5pub struct TailwindFlexWrap {
6    kind: StandardValue,
7}
8
9crate::macros::sealed::keyword_instance!(TailwindFlexWrap => "flex-wrap");
10
11impl Display for TailwindFlexWrap {
12    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
13        match &self.kind {
14            StandardValue::Keyword(s) => match s.as_str() {
15                "wrap" => write!(f, "flex-wrap"),
16                "wrap-reverse" => write!(f, "flex-wrap-reverse"),
17                "nowrap" => write!(f, "flex-nowrap"),
18                _ => write!(f, "flex-wrap-{}", s),
19            },
20            StandardValue::Arbitrary(s) => write!(f, "flex-wrap-{}", s.get_class()),
21        }
22    }
23}
24
25impl TailwindFlexWrap {
26    /// <https://tailwindcss.com/docs/flex-wrap>
27    pub fn parse(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
28        let kind = match pattern {
29            [] if arbitrary.is_none() => StandardValue::from("wrap"),
30            [] => StandardValue::parse_arbitrary(arbitrary)?,
31            ["none"] => StandardValue::from("nowrap"),
32            ["reverse"] => StandardValue::from("wrap-reverse"),
33            _ => StandardValue::parser("flex-wrap", &Self::check_valid)(pattern, arbitrary)?,
34        };
35        Ok(Self { kind })
36    }
37    /// dispatch to [flex-wrap](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap)
38    pub fn parse_arbitrary(arbitrary: &TailwindArbitrary) -> Result<Self> {
39        StandardValue::parse_arbitrary(arbitrary).map(|kind| Self { kind })
40    }
41    /// <https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap#syntax>
42    pub fn check_valid(mode: &str) -> bool {
43        let set = BTreeSet::from_iter(vec!["inherit", "initial", "nowrap", "revert", "unset", "wrap", "wrap-reverse"]);
44        set.contains(mode)
45    }
46}