swc_css_lints/
pattern.rs

1use swc_config::regex::CachedRegex;
2
3#[derive(Debug)]
4pub(crate) enum NamePattern {
5    Str(String),
6    Regex(CachedRegex),
7}
8
9impl NamePattern {
10    pub(crate) fn is_match<S>(&self, name: S) -> bool
11    where
12        S: AsRef<str>,
13    {
14        let name = name.as_ref();
15        match self {
16            Self::Str(s) => s == name,
17            Self::Regex(regex) => regex.is_match(name),
18        }
19    }
20}
21
22impl TryFrom<String> for NamePattern {
23    type Error = anyhow::Error;
24
25    fn try_from(pattern: String) -> Result<Self, Self::Error> {
26        if let Some(pattern) = pattern
27            .strip_prefix('/')
28            .and_then(|pattern| pattern.strip_suffix('/'))
29        {
30            CachedRegex::new(pattern).map(Self::Regex)
31        } else {
32            Ok(Self::Str(pattern))
33        }
34    }
35}
36
37impl Default for NamePattern {
38    fn default() -> Self {
39        Self::Str(String::new())
40    }
41}