use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OrgSuiteConfig {
pub enable_auto_transition: bool,
pub transition_check_interval: u32,
pub log_transitions: bool,
}
impl Default for OrgSuiteConfig {
fn default() -> Self {
Self {
enable_auto_transition: true,
transition_check_interval: 1, log_transitions: true,
}
}
}
impl OrgSuiteConfig {
pub fn new() -> Self {
Self::default()
}
pub fn with_auto_transition(mut self, enabled: bool) -> Self {
self.enable_auto_transition = enabled;
self
}
pub fn with_check_interval(mut self, interval: u32) -> Self {
self.transition_check_interval = interval;
self
}
pub fn with_logging(mut self, enabled: bool) -> Self {
self.log_transitions = enabled;
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = OrgSuiteConfig::default();
assert!(config.enable_auto_transition);
assert_eq!(config.transition_check_interval, 1);
assert!(config.log_transitions);
}
#[test]
fn test_builder_pattern() {
let config = OrgSuiteConfig::new()
.with_auto_transition(false)
.with_check_interval(10)
.with_logging(false);
assert!(!config.enable_auto_transition);
assert_eq!(config.transition_check_interval, 10);
assert!(!config.log_transitions);
}
#[test]
fn test_serde_roundtrip() {
let config = OrgSuiteConfig::new().with_check_interval(5);
let json = serde_json::to_string(&config).unwrap();
let deserialized: OrgSuiteConfig = serde_json::from_str(&json).unwrap();
assert_eq!(
config.transition_check_interval,
deserialized.transition_check_interval
);
}
}