use std::fs;
use std::path::Path;
pub fn copy_doc_media() {
let src = Path::new("documents/media"); let dest = Path::new("target/doc/media");
println!("cargo:rerun-if-changed=documents/media");
if !src.exists() {
eprintln!("Warning: Source directory {:?} does not exist!", src);
return;
}
if let Err(e) = fs::create_dir_all(dest) {
eprintln!("Error: Could not create destination {:?}: {}", dest, e);
return;
}
for entry in src.read_dir().expect("Failed to read source directory") {
let entry = match entry {
Ok(e) => e,
Err(e) => {
eprintln!("Warning: Failed to read directory entry: {}", e);
continue;
}
};
let path = entry.path();
let dest_path = dest.join(path.file_name().unwrap());
if let Err(e) = fs::copy(&path, &dest_path) {
eprintln!(
"Warning: Failed to copy {:?} to {:?}: {}",
path, dest_path, e
);
} else {
println!("Copied {:?} to {:?}", path, dest_path);
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::io::Write;
use tempfile::tempdir;
#[test]
fn test_copy_doc_media_simulated() {
let temp = tempdir().unwrap();
let src = temp.path().join("media_src");
let dest = temp.path().join("media_dest");
fs::create_dir_all(&src).unwrap();
fs::create_dir_all(&dest).unwrap();
let file_path = src.join("dummy.txt");
let mut file = fs::File::create(&file_path).unwrap();
writeln!(file, "dummy content").unwrap();
let dest_file = dest.join("dummy.txt");
let result = fs::copy(&file_path, &dest_file);
assert!(result.is_ok());
let copied_content = fs::read_to_string(&dest_file).unwrap();
assert_eq!(copied_content.trim(), "dummy content");
}
}