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}