1use serde::Deserialize;
2
3#[derive(Debug, Clone, Deserialize)]
8#[serde(default)]
9pub struct DatabaseConfig {
10 pub url: String,
12 pub max_connections: u32,
14 pub min_connections: u32,
16 pub acquire_timeout_secs: u64,
18 pub idle_timeout_secs: u64,
20 pub max_lifetime_secs: u64,
22}
23
24impl Default for DatabaseConfig {
25 fn default() -> Self {
26 Self {
27 url: "sqlite://data/main.db?mode=rwc".to_string(),
28 max_connections: 5,
29 min_connections: 1,
30 acquire_timeout_secs: 30,
31 idle_timeout_secs: 600,
32 max_lifetime_secs: 1800,
33 }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn default_timeout_values() {
43 let config = DatabaseConfig::default();
44 assert_eq!(config.acquire_timeout_secs, 30);
45 assert_eq!(config.idle_timeout_secs, 600);
46 assert_eq!(config.max_lifetime_secs, 1800);
47 }
48
49 #[test]
50 fn partial_yaml_deserialization() {
51 let yaml = r#"
52url: "postgres://localhost/test"
53acquire_timeout_secs: 10
54"#;
55 let config: DatabaseConfig = serde_yaml_ng::from_str(yaml).unwrap();
56 assert_eq!(config.url, "postgres://localhost/test");
57 assert_eq!(config.acquire_timeout_secs, 10);
58 assert_eq!(config.idle_timeout_secs, 600);
60 assert_eq!(config.max_lifetime_secs, 1800);
61 assert_eq!(config.max_connections, 5);
62 assert_eq!(config.min_connections, 1);
63 }
64}