Skip to main content

cargo_mate/captain/
log.rs

1pub struct Log;
2impl Log {
3    pub fn new() -> Self {
4        Log
5    }
6    pub fn log(&self, message: &str, tags: Vec<String>) -> anyhow::Result<()> {
7        use std::fs::{self, OpenOptions};
8        use std::io::Write;
9        use std::path::PathBuf;
10        let home_dir = dirs::home_dir().unwrap_or_else(|| PathBuf::from("."));
11        let config_dir = home_dir.join(".shipwreck");
12        if !config_dir.exists() {
13            let _ = fs::create_dir_all(&config_dir);
14        }
15        let log_file = config_dir.join("fell-overboard.log");
16        if !log_file.exists() {
17            let _ = OpenOptions::new().create(true).append(true).open(&log_file);
18        }
19        let log_entry = if !tags.is_empty() {
20            format!("[{}] {}\n", tags.join(","), message)
21        } else {
22            format!("{}\n", message)
23        };
24        if let Ok(mut file) = OpenOptions::new()
25            .create(true)
26            .append(true)
27            .open(&log_file)
28        {
29            let _ = file.write_all(log_entry.as_bytes());
30        }
31        Ok(())
32    }
33}