Skip to main content

crates_docs/server/handler/
config.rs

1//! Handler configuration
2
3/// Handler configuration (supports merging)
4///
5/// Used to configure handler behavior, such as metrics integration, log level, etc.
6#[derive(Debug, Clone, Default)]
7pub struct HandlerConfig {
8    /// Whether to enable verbose logging
9    pub verbose_logging: bool,
10    /// Whether to record metrics
11    pub enable_metrics: bool,
12}
13
14impl HandlerConfig {
15    /// Create new configuration
16    #[must_use]
17    pub fn new() -> Self {
18        Self::default()
19    }
20
21    /// Enable verbose logging
22    #[must_use]
23    pub fn with_verbose_logging(self) -> Self {
24        Self {
25            verbose_logging: true,
26            ..self
27        }
28    }
29
30    /// Enable metrics
31    #[must_use]
32    pub fn with_metrics(self) -> Self {
33        Self {
34            enable_metrics: true,
35            ..self
36        }
37    }
38
39    /// Merge configuration (other takes precedence over self)
40    #[must_use]
41    pub fn merge(self, other: Option<Self>) -> Self {
42        match other {
43            Some(other) => Self {
44                verbose_logging: other.verbose_logging || self.verbose_logging,
45                enable_metrics: other.enable_metrics || self.enable_metrics,
46            },
47            None => self,
48        }
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn test_handler_config_merge() {
58        // Test with override case
59        let base = HandlerConfig::default();
60        let override_config = HandlerConfig::new().with_verbose_logging().with_metrics();
61
62        let merged = base.merge(Some(override_config));
63        assert!(merged.verbose_logging);
64        assert!(merged.enable_metrics);
65
66        // Test empty override (use new base)
67        let base2 = HandlerConfig::default();
68        let merged_empty = base2.merge(None);
69        assert!(!merged_empty.verbose_logging);
70        assert!(!merged_empty.enable_metrics);
71    }
72
73    #[test]
74    fn test_handler_config_chained() {
75        let config = HandlerConfig::new().with_verbose_logging().with_metrics();
76
77        assert!(config.verbose_logging);
78        assert!(config.enable_metrics);
79    }
80}