1use serde::{Deserialize, Serialize};
5
6use crate::defaults::default_log_file;
7
8fn default_log_level() -> String {
9 "info".to_owned()
10}
11
12fn default_log_max_files() -> usize {
13 7
14}
15
16#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Deserialize, Serialize)]
18#[serde(rename_all = "lowercase")]
19#[non_exhaustive]
20pub enum LogRotation {
21 #[default]
22 Daily,
23 Hourly,
24 Never,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
29#[serde(default)]
30pub struct LoggingConfig {
31 #[serde(default = "default_log_file")]
33 pub file: String,
34 #[serde(default = "default_log_level")]
36 pub level: String,
37 pub rotation: LogRotation,
39 #[serde(default = "default_log_max_files")]
41 pub max_files: usize,
42}
43
44impl Default for LoggingConfig {
45 fn default() -> Self {
46 Self {
47 file: default_log_file(),
48 level: default_log_level(),
49 rotation: LogRotation::default(),
50 max_files: default_log_max_files(),
51 }
52 }
53}