collective_score_client/validator/
string_content.rs1use 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}