cargo_mate/captain/
log.rs1pub 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}