use crate::utils::paths::{MakeDirs, Metadata};
use std::path::Path;
pub fn copy(from: &Path, to: &Path) -> anyhow::Result<()> {
log::trace!("Copying `{}` -> `{}`", from.display(), to.display());
let mut src_is_dir = from.is_dir();
if let Ok(src_metadata) = from.get_metadata() {
src_is_dir = src_metadata.is_dir();
}
if src_is_dir {
for entry in from.read_dir()? {
let path = entry?.path();
copy(&path, &to.join(path.file_name().unwrap()))?;
}
} else {
if let Some(parent) = to.parent() {
if !parent.exists() {
parent.make_all_dirs()?;
}
}
if let Err(err) = std::fs::copy(from, to) {
log::warn!("Couldn't copy {} ({})", from.display(), err);
}
}
Ok(())
}