use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct TransactionConfig {
pub default_timeout: u64,
pub max_concurrent_transactions: usize,
#[serde(default)]
pub auto_commit: bool,
}
impl Default for TransactionConfig {
fn default() -> Self {
Self {
default_timeout: 30,
max_concurrent_transactions: 1000,
auto_commit: false,
}
}
}
impl TransactionConfig {
pub fn validate(&self) -> Result<(), String> {
if self.max_concurrent_transactions == 0 {
return Err("Max concurrent transactions must be greater than 0".to_string());
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_transaction_config_default() {
let config = TransactionConfig::default();
assert_eq!(config.default_timeout, 30);
assert_eq!(config.max_concurrent_transactions, 1000);
assert!(!config.auto_commit);
}
#[test]
fn test_transaction_config_validate() {
let config = TransactionConfig::default();
assert!(config.validate().is_ok());
let invalid_config = TransactionConfig {
max_concurrent_transactions: 0,
..Default::default()
};
assert!(invalid_config.validate().is_err());
}
}