Skip to main content

reinhardt_conf/settings/
logging.rs

1//! Logging settings fragment
2//!
3//! Provides composable logging configuration as a [`SettingsFragment`](crate::settings::fragment::SettingsFragment).
4
5use reinhardt_core::macros::settings;
6use serde::{Deserialize, Serialize};
7
8fn default_level() -> String {
9	"info".to_string()
10}
11
12fn default_format() -> String {
13	"text".to_string()
14}
15
16/// Logging configuration fragment.
17///
18/// Controls the log level and output format.
19#[settings(fragment = true, section = "logging")]
20#[non_exhaustive]
21#[derive(Clone, Debug, Serialize, Deserialize)]
22pub struct LoggingSettings {
23	/// Log level (e.g., `"trace"`, `"debug"`, `"info"`, `"warn"`, `"error"`).
24	#[serde(default = "default_level")]
25	pub level: String,
26	/// Log output format (e.g., `"text"`, `"json"`).
27	#[serde(default = "default_format")]
28	pub format: String,
29}
30
31impl Default for LoggingSettings {
32	fn default() -> Self {
33		Self {
34			level: "info".to_string(),
35			format: "text".to_string(),
36		}
37	}
38}
39
40#[cfg(test)]
41mod tests {
42	use super::*;
43	use crate::settings::fragment::SettingsFragment;
44	use rstest::rstest;
45
46	#[rstest]
47	fn test_logging_section_name() {
48		// Arrange / Act
49		let section = LoggingSettings::section();
50
51		// Assert
52		assert_eq!(section, "logging");
53	}
54
55	#[rstest]
56	fn test_logging_default_values() {
57		// Arrange / Act
58		let settings = LoggingSettings::default();
59
60		// Assert
61		assert_eq!(settings.level, "info");
62		assert_eq!(settings.format, "text");
63	}
64}