use std::env;
use std::fs;
use std::path::Path;
const PALETTE_EXTENSION: &str = "colorant";
fn main() {
let manifest_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR is set by cargo");
let themes_dir = Path::new(&manifest_dir).join("themes");
let out_dir = env::var("OUT_DIR").expect("OUT_DIR is set by cargo");
let out_path = Path::new(&out_dir).join("bundled_themes.rs");
println!("cargo:rerun-if-changed=themes");
let mut paths: Vec<_> = fs::read_dir(&themes_dir)
.unwrap_or_else(|e| panic!("reading {}: {}", themes_dir.display(), e))
.filter_map(|e| e.ok().map(|e| e.path()))
.filter(|p| p.extension().and_then(|s| s.to_str()) == Some(PALETTE_EXTENSION))
.collect();
paths.sort_by(|a, b| a.file_stem().cmp(&b.file_stem()));
let mut out = String::from("// Generated by build.rs — do not edit.\n");
out.push_str("pub(crate) const BUNDLED_THEMES: &[(&str, &str)] = &[\n");
for path in paths {
let name = path
.file_stem()
.and_then(|s| s.to_str())
.unwrap_or_else(|| panic!("non-UTF-8 theme filename: {}", path.display()));
let content = fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("reading {}: {}", path.display(), e));
out.push_str(&format!(" ({:?}, {:?}),\n", name, content));
println!("cargo:rerun-if-changed={}", path.display());
}
out.push_str("];\n");
fs::write(&out_path, out).unwrap_or_else(|e| panic!("writing {}: {}", out_path.display(), e));
}