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}