use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Rule {
pub id: String,
pub category: String,
#[serde(default)]
pub subcategory: Option<String>,
#[serde(default)]
pub keywords: Vec<String>,
#[serde(default)]
pub patterns: Vec<String>,
#[serde(default)]
pub priority: i32,
#[serde(default = "default_confidence")]
pub confidence: f64,
}
fn default_confidence() -> f64 {
0.85
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RuleSet {
#[serde(default)]
pub version: Option<String>,
pub rules: Vec<Rule>,
}
impl RuleSet {
pub fn by_priority(&self) -> Vec<&Rule> {
let mut refs: Vec<&Rule> = self.rules.iter().collect();
refs.sort_by(|a, b| b.priority.cmp(&a.priority));
refs
}
}