Skip to main content

praxis_core/config/
admin.rs

1// SPDX-License-Identifier: LGPL-3.0-only
2// Copyright (c) 2024 Shane Utt
3
4//! Admin endpoint configuration.
5
6use serde::Deserialize;
7
8// -----------------------------------------------------------------------------
9// AdminConfig
10// -----------------------------------------------------------------------------
11
12/// Admin endpoint settings for health check listeners.
13///
14/// ```
15/// use praxis_core::config::AdminConfig;
16///
17/// let admin: AdminConfig = serde_yaml::from_str(
18///     r#"
19/// address: "127.0.0.1:9901"
20/// verbose: true
21/// "#,
22/// )
23/// .unwrap();
24/// assert_eq!(admin.address.as_deref(), Some("127.0.0.1:9901"));
25/// assert!(admin.verbose);
26/// ```
27#[derive(Debug, Clone, Default, Deserialize)]
28#[serde(default)]
29pub struct AdminConfig {
30    /// Admin endpoint bind address.
31    pub address: Option<String>,
32
33    /// Include per-cluster detail in `/ready` response.
34    pub verbose: bool,
35}
36
37// -----------------------------------------------------------------------------
38// Tests
39// -----------------------------------------------------------------------------
40
41#[cfg(test)]
42mod tests {
43    use super::*;
44
45    #[test]
46    fn defaults_are_none_and_false() {
47        let admin = AdminConfig::default();
48        assert!(admin.address.is_none(), "address should default to None");
49        assert!(!admin.verbose, "verbose should default to false");
50    }
51
52    #[test]
53    fn parse_full_config() {
54        let admin: AdminConfig = serde_yaml::from_str(
55            r#"
56address: "127.0.0.1:9901"
57verbose: true
58"#,
59        )
60        .unwrap();
61        assert_eq!(
62            admin.address.as_deref(),
63            Some("127.0.0.1:9901"),
64            "address should be parsed"
65        );
66        assert!(admin.verbose, "verbose should be true");
67    }
68
69    #[test]
70    fn parse_empty_yields_defaults() {
71        let admin: AdminConfig = serde_yaml::from_str("{}").unwrap();
72        assert!(admin.address.is_none(), "address should default to None");
73        assert!(!admin.verbose, "verbose should default to false");
74    }
75}