Skip to main content

mockforge_intelligence/behavioral_economics/
config.rs

1//! Behavioral Economics configuration
2//!
3//! Defines the configuration structure for the behavioral economics engine,
4//! including rule definitions and engine settings.
5
6use crate::behavioral_economics::rules::BehaviorRule;
7use serde::{Deserialize, Serialize};
8
9/// Behavioral Economics configuration
10#[derive(Debug, Clone, Serialize, Deserialize, Default)]
11pub struct BehavioralEconomicsConfig {
12    /// Enable behavioral economics engine
13    #[serde(default)]
14    pub enabled: bool,
15
16    /// List of behavior rules
17    #[serde(default)]
18    pub rules: Vec<BehaviorRule>,
19
20    /// Evaluation interval in milliseconds (how often to re-evaluate conditions)
21    #[serde(default = "default_evaluation_interval")]
22    pub evaluation_interval_ms: u64,
23
24    /// Enable metrics collection
25    #[serde(default = "default_true")]
26    pub enable_metrics: bool,
27}
28
29fn default_evaluation_interval() -> u64 {
30    1000 // 1 second
31}
32
33fn default_true() -> bool {
34    true
35}
36
37impl BehavioralEconomicsConfig {
38    /// Create a new configuration
39    pub fn new() -> Self {
40        Self::default()
41    }
42
43    /// Add a rule
44    pub fn with_rule(mut self, rule: BehaviorRule) -> Self {
45        self.rules.push(rule);
46        self
47    }
48
49    /// Enable the engine
50    pub fn enable(mut self) -> Self {
51        self.enabled = true;
52        self
53    }
54
55    /// Disable the engine
56    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}