pkgs/logger/
logger.rs

1use std::path::Path;
2
3use super::{LogMessage, LoggerOutput};
4
5pub struct Logger<O: LoggerOutput> {
6    output: O,
7    messages: Vec<LogMessage>,
8}
9
10impl<O: LoggerOutput> Logger<O> {
11    pub fn new(output: O) -> Self {
12        Self {
13            output,
14            messages: vec![],
15        }
16    }
17
18    pub fn messages(&self) -> &[LogMessage] {
19        &self.messages
20    }
21
22    pub fn log(&mut self, message: LogMessage) {
23        self.output.log(&message);
24        self.messages.push(message);
25    }
26
27    pub fn load_module(&mut self, module: impl AsRef<str>) {
28        self.log(LogMessage::LoadModule(module.as_ref().into()));
29    }
30
31    pub fn unload_module(&mut self, module: impl AsRef<str>) {
32        self.log(LogMessage::UnloadModule(module.as_ref().into()));
33    }
34
35    pub fn rollback_load_module(&mut self, module: impl AsRef<str>) {
36        self.log(LogMessage::RollbackLoadModule(module.as_ref().into()));
37    }
38
39    pub fn rollback_unload_module(&mut self, module: impl AsRef<str>) {
40        self.log(LogMessage::RollbackUnloadModule(module.as_ref().into()));
41    }
42
43    pub fn create_dir(&mut self, path: impl AsRef<Path>) {
44        self.log(LogMessage::CreateDir(path.as_ref().into()));
45    }
46
47    pub fn create_symlink(&mut self, src: impl AsRef<Path>, dst: impl AsRef<Path>) {
48        self.log(LogMessage::CreateSymlink {
49            src: src.as_ref().into(),
50            dst: dst.as_ref().into(),
51        });
52    }
53
54    pub fn remove_dir(&mut self, path: impl AsRef<Path>) {
55        self.log(LogMessage::RemoveDir(path.as_ref().into()));
56    }
57
58    pub fn remove_symlink(&mut self, src: impl AsRef<Path>, dst: impl AsRef<Path>) {
59        self.log(LogMessage::RemoveSymlink {
60            src: src.as_ref().into(),
61            dst: dst.as_ref().into(),
62        });
63    }
64}