1use std::collections::HashMap;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct FilterConfig {
6 pub enabled: bool,
7 pub rules: Vec<FilterRule>,
8 pub cache_enabled: bool,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct FilterRule {
13 pub pattern: String,
14 pub action: FilterAction,
15 pub priority: i32,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub enum FilterAction {
20 Allow,
21 Deny,
22 Log,
23}
24
25impl Default for FilterConfig {
26 fn default() -> Self {
27 Self {
28 enabled: true,
29 rules: Vec::new(),
30 cache_enabled: false,
31 }
32 }
33}
34
35pub fn create_default_filter() -> FilterConfig {
36 FilterConfig::default()
37}
38
39pub fn validate_filter_config(config: &FilterConfig) -> Result<(), String> {
40 for rule in &config.rules {
41 if rule.pattern.is_empty() {
42 return Err("Filter rule pattern cannot be empty".to_string());
43 }
44 }
45 Ok(())
46}