brainwires_system/
config.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct ReactorConfig {
8 pub max_events_per_minute: u32,
10 pub global_debounce_ms: u64,
12 pub max_watch_depth: u32,
14 #[serde(default)]
16 pub rules: Vec<ReactorRuleDef>,
17}
18
19impl Default for ReactorConfig {
20 fn default() -> Self {
21 Self {
22 max_events_per_minute: 60,
23 global_debounce_ms: 500,
24 max_watch_depth: 10,
25 rules: Vec::new(),
26 }
27 }
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct ReactorRuleDef {
33 pub id: String,
35 pub name: String,
37 pub watch_paths: Vec<String>,
39 #[serde(default)]
41 pub patterns: Vec<String>,
42 #[serde(default)]
44 pub exclude_patterns: Vec<String>,
45 #[serde(default)]
47 pub event_types: Vec<String>,
48 #[serde(default = "default_debounce")]
50 pub debounce_ms: u64,
51 #[serde(default = "default_true")]
53 pub enabled: bool,
54}
55
56fn default_debounce() -> u64 {
57 1000
58}
59
60fn default_true() -> bool {
61 true
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct ServiceConfig {
67 #[serde(default)]
69 pub allowed_services: Vec<String>,
70 #[serde(default)]
72 pub forbidden_services: Vec<String>,
73 #[serde(default = "default_true")]
75 pub read_only: bool,
76 #[serde(default)]
78 pub docker_socket_path: Option<String>,
79}
80
81impl Default for ServiceConfig {
82 fn default() -> Self {
83 Self {
84 allowed_services: Vec::new(),
85 forbidden_services: Vec::new(),
86 read_only: true,
87 docker_socket_path: None,
88 }
89 }
90}