use std::io::Write;
use serde_json::Value;
fn restrict(path: &str) {
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt;
let _ = std::fs::set_permissions(path, std::fs::Permissions::from_mode(0o600));
}
#[cfg(not(unix))]
let _ = path;
}
pub fn start_recording(path: &str) -> Result<(), crate::BoxError> {
let _ = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(path)
.map_err(|e| format!("Failed to open recording file '{path}': {e}"))?;
restrict(path);
Ok(())
}
pub fn log_entry(path: &str, cmd: &Value, response: &Value) -> Result<(), crate::BoxError> {
let mut file = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(path)
.map_err(|e| format!("Failed to open recording file '{path}': {e}"))?;
restrict(path);
let entry = serde_json::json!({
"cmd": cmd,
"response": response,
});
let line = serde_json::to_string(&entry)?;
writeln!(file, "{line}")?;
Ok(())
}