use std::fs;
use std::path::{Path, PathBuf};
fn main() {
let manifest = PathBuf::from(
std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR set by cargo"),
);
let sibling = manifest.join("..").join("adler-web").join("dist");
let local = manifest.join("dist");
println!("cargo:rerun-if-changed=../adler-web/dist");
println!("cargo:rerun-if-changed=build.rs");
if !sibling.is_dir() {
return;
}
if let Err(e) = mirror(&sibling, &local) {
panic!(
"adler-server build.rs: failed to mirror {} -> {}: {e}",
sibling.display(),
local.display()
);
}
}
fn mirror(src: &Path, dst: &Path) -> std::io::Result<()> {
if dst.exists() {
fs::remove_dir_all(dst)?;
}
copy_recursive(src, dst)
}
fn copy_recursive(src: &Path, dst: &Path) -> std::io::Result<()> {
fs::create_dir_all(dst)?;
for entry in fs::read_dir(src)? {
let entry = entry?;
let target = dst.join(entry.file_name());
if entry.file_type()?.is_dir() {
copy_recursive(&entry.path(), &target)?;
} else {
fs::copy(entry.path(), &target)?;
}
}
Ok(())
}