collective_score_client/validator/
string_content.rs

1use regex::Regex;
2
3pub enum StringContent<'a> {
4    Full(&'a str),
5    Part(&'a str),
6    Regex(Regex),
7    Fn(fn(&str) -> bool),
8}
9
10impl<'a> StringContent<'a> {
11    pub fn is_match(&self, haystack: &str) -> bool {
12        match self {
13            StringContent::Full(full) => *full == haystack,
14            StringContent::Part(part) => haystack.contains(part),
15            StringContent::Regex(regex) => regex.is_match(haystack),
16            StringContent::Fn(f) => f(haystack),
17        }
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use regex::Regex;
24
25    use super::StringContent;
26
27    const TEST_STR: &str = "Bla bla ok 42.0 :)\nfoo";
28
29    #[test]
30    fn full() {
31        assert!(StringContent::Full(TEST_STR).is_match(TEST_STR))
32    }
33
34    #[test]
35    fn part() {
36        assert!(StringContent::Part("ok").is_match(TEST_STR))
37    }
38
39    #[test]
40    fn regex() {
41        assert!(StringContent::Regex(Regex::new(r#"42\.[0-9] :\)"#).unwrap()).is_match(TEST_STR))
42    }
43}