tempura 0.5.2

Pipeline-based Static site generator
Documentation
use regex::Regex;
use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize)]
#[serde(tag = "type")]
pub enum StringMatcher {
    Regex {
        #[serde(with = "serde_regex")]
        regex: Regex,
    },
    Not {
        matcher: Box<StringMatcher>,
    },
    All {
        matchers: Vec<StringMatcher>,
    },
    Any {
        matchers: Vec<StringMatcher>,
    },
}

impl StringMatcher {
    pub fn is_match(&self, string: &str) -> bool {
        match self {
            Self::Regex { regex } => regex.is_match(string),
            Self::Not { matcher } => !matcher.is_match(string),
            Self::All { matchers } => matchers.iter().all(|matcher| matcher.is_match(string)),
            Self::Any { matchers } => matchers.iter().any(|matcher| matcher.is_match(string)),
        }
    }
}