use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReactorConfig {
pub max_events_per_minute: u32,
pub global_debounce_ms: u64,
pub max_watch_depth: u32,
#[serde(default)]
pub rules: Vec<ReactorRuleDef>,
}
impl Default for ReactorConfig {
fn default() -> Self {
Self {
max_events_per_minute: 60,
global_debounce_ms: 500,
max_watch_depth: 10,
rules: Vec::new(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReactorRuleDef {
pub id: String,
pub name: String,
pub watch_paths: Vec<String>,
#[serde(default)]
pub patterns: Vec<String>,
#[serde(default)]
pub exclude_patterns: Vec<String>,
#[serde(default)]
pub event_types: Vec<String>,
#[serde(default = "default_debounce")]
pub debounce_ms: u64,
#[serde(default = "default_true")]
pub enabled: bool,
}
fn default_debounce() -> u64 {
1000
}
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServiceConfig {
#[serde(default)]
pub allowed_services: Vec<String>,
#[serde(default)]
pub forbidden_services: Vec<String>,
#[serde(default = "default_true")]
pub read_only: bool,
#[serde(default)]
pub docker_socket_path: Option<String>,
}
impl Default for ServiceConfig {
fn default() -> Self {
Self {
allowed_services: Vec::new(),
forbidden_services: Vec::new(),
read_only: true,
docker_socket_path: None,
}
}
}