use crate::error::{MhoError, Result};
use std::path::Path;
pub fn ensure_dir(path: &Path) -> Result<()> {
if !path.exists() {
std::fs::create_dir_all(path).map_err(|e| {
MhoError::Io(std::io::Error::new(
e.kind(),
format!("Failed to create directory {}: {}", path.display(), e),
))
})?;
}
Ok(())
}
pub fn atomic_write(path: &Path, content: &str) -> Result<()> {
if let Some(parent) = path.parent() {
ensure_dir(parent)?;
}
let temp_path = path.with_extension("tmp");
std::fs::write(&temp_path, content).map_err(|e| {
MhoError::Io(std::io::Error::new(
e.kind(),
format!(
"Failed to write to temp file {}: {}",
temp_path.display(),
e
),
))
})?;
std::fs::rename(&temp_path, path).map_err(|e| {
MhoError::Io(std::io::Error::new(
e.kind(),
format!(
"Failed to rename {} to {}: {}",
temp_path.display(),
path.display(),
e
),
))
})?;
Ok(())
}
pub fn file_exists(path: &Path) -> bool {
path.exists() && path.is_file()
}