use std::{fs, io, path::Path};
use crate::error::{Error, Result};
pub fn write_atomic(path: &Path, content: &str) -> Result<()> {
if let Some(parent) = path.parent() {
fs::create_dir_all(parent).map_err(|e| Error::Io {
path: parent.to_owned(),
source: e,
})?;
}
let tmp = path.with_extension("agent-policy.tmp");
fs::write(&tmp, content).map_err(|e| Error::Io {
path: tmp.clone(),
source: e,
})?;
fs::rename(&tmp, path).map_err(|e| Error::Io {
path: path.to_owned(),
source: e,
})?;
Ok(())
}
#[allow(dead_code)] pub fn read_if_exists(path: &Path) -> Result<Option<String>> {
match fs::read_to_string(path) {
Ok(s) => Ok(Some(s)),
Err(e) if e.kind() == io::ErrorKind::NotFound => Ok(None),
Err(e) => Err(Error::Io {
path: path.to_owned(),
source: e,
}),
}
}