Skip to main content

lychee_lib/filter/
regex_filter.rs

1use regex::RegexSet;
2
3/// Filter configuration for the link checker.
4/// You can include and exclude links and paths based on regex patterns
5#[derive(Clone, Debug)]
6pub struct RegexFilter {
7    /// User-defined set of regex patterns
8    regex: RegexSet,
9}
10
11impl RegexFilter {
12    /// Create a new empty regex set.
13    #[must_use]
14    pub fn empty() -> Self {
15        Self {
16            regex: RegexSet::empty(),
17        }
18    }
19
20    /// Create a new empty regex set.
21    pub fn new<I, S>(exprs: I) -> Result<Self, regex::Error>
22    where
23        S: AsRef<str>,
24        I: IntoIterator<Item = S>,
25    {
26        Ok(Self {
27            regex: RegexSet::new(exprs)?,
28        })
29    }
30
31    #[inline]
32    #[must_use]
33    /// Returns `true` if the given input string matches the regex set
34    /// and should hence be included or excluded
35    pub fn is_match(&self, input: &str) -> bool {
36        self.regex.is_match(input)
37    }
38
39    #[inline]
40    #[must_use]
41    /// Whether there were no regular expressions defined
42    pub fn is_empty(&self) -> bool {
43        self.regex.is_empty()
44    }
45}
46
47impl From<RegexSet> for RegexFilter {
48    fn from(regex: RegexSet) -> Self {
49        Self { regex }
50    }
51}