crates_docs/server/handler/
config.rs1#[derive(Debug, Clone, Default)]
7pub struct HandlerConfig {
8 pub verbose_logging: bool,
10 pub enable_metrics: bool,
12}
13
14impl HandlerConfig {
15 #[must_use]
17 pub fn new() -> Self {
18 Self::default()
19 }
20
21 #[must_use]
23 pub fn with_verbose_logging(self) -> Self {
24 Self {
25 verbose_logging: true,
26 ..self
27 }
28 }
29
30 #[must_use]
32 pub fn with_metrics(self) -> Self {
33 Self {
34 enable_metrics: true,
35 ..self
36 }
37 }
38
39 #[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 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 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}