use crate::{FrenError, RenamePlan};
use std::collections::HashMap;
use std::path::PathBuf;
pub fn check_within_batch(plans: &[RenamePlan]) -> Result<(), FrenError> {
let mut targets: HashMap<PathBuf, &RenamePlan> = HashMap::new();
for plan in plans {
let target = plan.parent.join(&plan.new_name);
if let Some(prev) = targets.insert(target.clone(), plan) {
return Err(FrenError::WithinBatchCollision {
a: prev.original_path.clone(),
b: plan.original_path.clone(),
target,
});
}
}
Ok(())
}
pub fn check_preexisting(plans: &[RenamePlan]) -> Result<(), FrenError> {
let plan_sources: std::collections::HashSet<&PathBuf> =
plans.iter().map(|p| &p.original_path).collect();
for plan in plans {
let target = plan.parent.join(&plan.new_name);
if plan_sources.contains(&target) {
continue;
}
if target.exists() {
return Err(FrenError::TargetExists(target));
}
}
Ok(())
}