1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use serde::{Deserialize, Serialize};

use regex::Regex;

#[derive(Debug, PartialEq, Serialize, Deserialize)]
pub struct Rule {
    pub contain: String,
    pub description: Option<String>,
    pub regex: Option<bool>,
}

pub fn get_violated_rule<'a>(rules: &'a Vec<Rule>, command: &String) -> Option<&'a Rule> {
    rules.iter().find(|rule| {
        if rule.regex == Some(true) {
            match Regex::new(&rule.contain) {
                Ok(re) => re.is_match(&command),
                Err(_) => false,
            }
        } else {
            command.contains(&rule.contain)
        }
    })
}