use crate::persist_worker::PersistDone;
use std::path::PathBuf;
pub(crate) fn run_swap(tmp: PathBuf, live: PathBuf, trash: Option<PathBuf>) -> PersistDone {
let linked = match &trash {
Some(t) => std::fs::hard_link(&live, t).is_ok(),
None => false,
};
PersistDone::SwapImage {
result: std::fs::rename(&tmp, &live),
trash: trash.filter(|_| linked),
}
}
pub(crate) fn run_cleanup(paths: Vec<PathBuf>, bufs: Vec<Vec<u8>>) -> PersistDone {
let mut failed = Vec::new();
for p in paths {
if let Err(e) = std::fs::remove_file(&p) {
failed.push((p, e));
}
}
drop(bufs);
PersistDone::Cleanup { failed }
}