use std::{
fs,
path::{Path, PathBuf},
process,
};
pub struct TempGuard {
main: PathBuf,
backup: PathBuf,
}
impl TempGuard {
pub fn new(name: &str) -> Self {
let main = std::env::temp_dir().join(format!("{}_cli_test_{}.json", process::id(), name));
let backup = PathBuf::from(format!("{}.bak", main.to_string_lossy()));
clean(&main);
clean(&backup);
TempGuard { main, backup }
}
pub fn main_path(&self) -> String {
self.main.to_string_lossy().to_string()
}
pub fn backup_path(&self) -> String {
self.backup.to_string_lossy().to_string()
}
}
fn clean(path: &Path) {
if fs::remove_file(path).is_err() {
let _ = fs::remove_dir_all(path);
}
}
impl Drop for TempGuard {
fn drop(&mut self) {
clean(&self.main);
clean(&self.backup);
}
}