#![allow(clippy::panic, clippy::unwrap_used)]
use std::path::{Path, PathBuf};
use std::{env, fs};
fn main() {
let (crate_root_dir, target_docs_root_dir) = root_dirs();
let source_paths = [
crate_root_dir.join("doc/img"),
crate_root_dir.join("doc/puzzles"),
];
const COPY_OPTS: fs_extra::dir::CopyOptions = fs_extra::dir::CopyOptions {
overwrite: true,
skip_exist: false,
buffer_size: 64000,
copy_inside: false,
content_only: false,
depth: 0,
};
fs_extra::copy_items(&source_paths, &target_docs_root_dir, ©_OPTS).unwrap_or_else(|err| {
panic!("copy into \"{}\" failed: {err}", target_docs_root_dir.display())
});
for pth in source_paths {
println!("cargo:rerun-if-changed={}", pth.as_path().display());
}
}
fn root_dirs() -> (PathBuf, PathBuf) {
let crate_name = env::var("CARGO_PKG_NAME").unwrap();
let crate_root_dir: PathBuf = env::var("CARGO_MANIFEST_DIR").unwrap().into();
let docs_out_dir_root = cargo_target_dir()
.join("doc/static.files")
.join(&crate_name);
fs::create_dir_all(&docs_out_dir_root).unwrap_or_else(|err| {
panic!("create_dir_all(\"{}\") failed: {err}", docs_out_dir_root.display())
});
(crate_root_dir, docs_out_dir_root.canonicalize().unwrap())
}
fn cargo_target_dir() -> PathBuf {
let out_dir: PathBuf = env::var("OUT_DIR").unwrap().into();
out_dir.ancestors().nth(4).map_or_else(
|| panic!("can't derive target dir from OUT_DIR=\"{}\"", out_dir.display()),
Path::to_path_buf,
)
}