use std::path::Path;
pub fn write_atomic(path: &Path, contents: &[u8]) -> std::io::Result<()> {
let parent = path.parent().ok_or_else(|| {
std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("path has no parent directory: {}", path.display()),
)
})?;
let mut tmp = tempfile::NamedTempFile::new_in(parent)?;
std::io::Write::write_all(&mut tmp, contents)?;
tmp.as_file().sync_all()?;
tmp.persist(path)?;
Ok(())
}