1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use serde::{Deserialize, Serialize};
use std::path::{Path, PathBuf};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Log(pub LogEntry);

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LogEntry {
    pub format: String,
    pub level: String,
    pub output: LogOutput,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LogOutput {
    Stdout,
    Stderr,
    File(PathBuf),
}

impl Log {
    pub fn file_path(&self) -> Option<&Path> {
        match &self.0.output {
            LogOutput::File(path) => Some(path.as_path()),
            _ => None,
        }
    }
}