mockforge_intelligence/behavioral_economics/
config.rs1use crate::behavioral_economics::rules::BehaviorRule;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Serialize, Deserialize, Default)]
11pub struct BehavioralEconomicsConfig {
12 #[serde(default)]
14 pub enabled: bool,
15
16 #[serde(default)]
18 pub rules: Vec<BehaviorRule>,
19
20 #[serde(default = "default_evaluation_interval")]
22 pub evaluation_interval_ms: u64,
23
24 #[serde(default = "default_true")]
26 pub enable_metrics: bool,
27}
28
29fn default_evaluation_interval() -> u64 {
30 1000 }
32
33fn default_true() -> bool {
34 true
35}
36
37impl BehavioralEconomicsConfig {
38 pub fn new() -> Self {
40 Self::default()
41 }
42
43 pub fn with_rule(mut self, rule: BehaviorRule) -> Self {
45 self.rules.push(rule);
46 self
47 }
48
49 pub fn enable(mut self) -> Self {
51 self.enabled = true;
52 self
53 }
54
55 pub fn disable(mut self) -> Self {
57 self.enabled = false;
58 self
59 }
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65 use crate::behavioral_economics::actions::BehaviorAction;
66 use crate::behavioral_economics::conditions::BehaviorCondition;
67 use crate::behavioral_economics::rules::BehaviorRule;
68
69 #[test]
70 fn test_config_creation() {
71 let config = BehavioralEconomicsConfig::new();
72 assert!(!config.enabled);
73 assert!(config.rules.is_empty());
74 }
75
76 #[test]
77 fn test_config_with_rule() {
78 let rule = BehaviorRule::declarative(
79 "test-rule".to_string(),
80 BehaviorCondition::Always,
81 BehaviorAction::NoOp,
82 100,
83 );
84 let config = BehavioralEconomicsConfig::new().with_rule(rule);
85 assert_eq!(config.rules.len(), 1);
86 }
87}