#![allow(clippy::expect_used, clippy::unwrap_used)]
use std::path::PathBuf;
fn main() {
let themes_dir = PathBuf::from("assets/themes");
println!("cargo:rerun-if-changed=assets/themes");
let mut names: Vec<String> = std::fs::read_dir(&themes_dir)
.expect("assets/themes directory not found — run from the crate root")
.filter_map(|entry| entry.ok())
.filter_map(|entry| {
let path = entry.path();
if path.extension().is_some_and(|ext| ext == "toml") {
path.file_name().and_then(|n| n.to_str()).map(str::to_owned)
} else {
None
}
})
.collect();
names.sort();
for name in &names {
println!("cargo:rerun-if-changed=assets/themes/{name}");
}
let includes: String = names
.iter()
.map(|name| {
format!(
" include_str!(concat!(env!(\"CARGO_MANIFEST_DIR\"), \"/assets/themes/{name}\")),\n"
)
})
.collect();
let generated = format!(
"// AUTO-GENERATED by build.rs — do not edit.\n\
// Drop a *.toml file into assets/themes/ and rebuild to add a theme.\n\
pub(super) const BUILTIN_THEME_SOURCES: &[&str] = &[\n\
{includes}\
];\n"
);
let out_path =
PathBuf::from(std::env::var("OUT_DIR").expect("OUT_DIR not set")).join("builtin_themes.rs");
std::fs::write(&out_path, generated).expect("failed to write builtin_themes.rs");
}