stygian_graph/application/
config.rs

1//! Configuration management
2
3use serde::{Deserialize, Serialize};
4
5/// Application configuration
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Config {
8    /// Log level
9    pub log_level: String,
10    /// Worker pool size
11    pub workers: usize,
12}
13
14impl Default for Config {
15    fn default() -> Self {
16        Self {
17            log_level: "info".to_string(),
18            workers: 4,
19        }
20    }
21}
22
23#[cfg(test)]
24#[allow(clippy::unwrap_used)]
25mod tests {
26    use super::*;
27
28    #[test]
29    fn default_log_level_is_info() {
30        let cfg = Config::default();
31        assert_eq!(cfg.log_level, "info");
32    }
33
34    #[test]
35    fn default_workers_is_four() {
36        let cfg = Config::default();
37        assert_eq!(cfg.workers, 4);
38    }
39
40    #[test]
41    fn config_serializes_to_json() {
42        let cfg = Config::default();
43        let json = serde_json::to_string(&cfg).unwrap();
44        assert!(json.contains("log_level"));
45        assert!(json.contains("workers"));
46    }
47
48    #[test]
49    fn config_roundtrips_through_json() {
50        let cfg = Config {
51            log_level: "debug".to_string(),
52            workers: 8,
53        };
54        let json = serde_json::to_string(&cfg).unwrap();
55        let back: Config = serde_json::from_str(&json).unwrap();
56        assert_eq!(back.log_level, "debug");
57        assert_eq!(back.workers, 8);
58    }
59}