praxis_core/config/
admin.rs1use serde::Deserialize;
7
8#[derive(Debug, Clone, Default, Deserialize, serde::Serialize)]
28#[serde(default, deny_unknown_fields)]
29pub struct AdminConfig {
30 pub address: Option<String>,
36
37 pub verbose: bool,
39}
40
41#[cfg(test)]
46#[expect(clippy::allow_attributes, reason = "blanket test suppressions")]
47#[allow(
48 clippy::unwrap_used,
49 clippy::expect_used,
50 clippy::indexing_slicing,
51 clippy::needless_raw_strings,
52 clippy::needless_raw_string_hashes,
53 reason = "tests use unwrap/expect/indexing/raw strings for brevity"
54)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn defaults_are_none_and_false() {
60 let admin = AdminConfig::default();
61 assert!(admin.address.is_none(), "address should default to None");
62 assert!(!admin.verbose, "verbose should default to false");
63 }
64
65 #[test]
66 fn parse_full_config() {
67 let admin: AdminConfig = serde_yaml::from_str(
68 r#"
69address: "127.0.0.1:9901"
70verbose: true
71"#,
72 )
73 .unwrap();
74 assert_eq!(
75 admin.address.as_deref(),
76 Some("127.0.0.1:9901"),
77 "address should be parsed"
78 );
79 assert!(admin.verbose, "verbose should be true");
80 }
81
82 #[test]
83 fn parse_empty_yields_defaults() {
84 let admin: AdminConfig = serde_yaml::from_str("{}").unwrap();
85 assert!(admin.address.is_none(), "address should default to None");
86 assert!(!admin.verbose, "verbose should default to false");
87 }
88}