use std::path::PathBuf;
fn ensure_dir(path: PathBuf, label: &str) -> PathBuf {
if !path.exists() {
std::fs::create_dir_all(&path).unwrap_or_else(|err| {
panic!(
"Failed to create {label} directory {}: {err}",
path.display()
)
});
}
path
}
fn project_root() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
}
#[allow(dead_code)]
pub fn generated_root() -> PathBuf {
ensure_dir(project_root().join("generated"), "generated root")
}
#[allow(dead_code)]
pub fn docs_assets_root() -> PathBuf {
ensure_dir(
project_root().join("docs").join("assets"),
"docs assets root",
)
}
#[allow(dead_code)]
pub fn example_output_path(filename: &str) -> PathBuf {
let output_dir = ensure_dir(
generated_root().join("examples"),
"generated examples output",
);
output_dir.join(filename)
}
#[allow(dead_code)]
pub fn example_output_path_in(subdir: &str, filename: &str) -> PathBuf {
let output_dir = ensure_dir(
generated_root().join("examples").join(subdir),
"generated example output subdirectory",
);
output_dir.join(filename)
}
#[allow(dead_code)]
pub fn readme_asset_path(filename: &str) -> PathBuf {
ensure_dir(
docs_assets_root().join("readme"),
"docs readme asset output",
)
.join(filename)
}
#[allow(dead_code)]
pub fn rustdoc_asset_path(filename: &str) -> PathBuf {
ensure_dir(
docs_assets_root().join("rustdoc"),
"docs rustdoc asset output",
)
.join(filename)
}
#[allow(dead_code)]
pub fn rust_gallery_asset_path(category: &str, filename: &str) -> PathBuf {
ensure_dir(
docs_assets_root()
.join("gallery")
.join("rust")
.join(category),
"docs Rust gallery asset output",
)
.join(filename)
}