Files

36 lines
1.4 KiB
Rust

use std::{env, fs, path::PathBuf};
fn main() {
println!("cargo:rerun-if-changed=lang");
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR"));
let lang_dir = manifest_dir.join("lang");
let mut files = fs::read_dir(&lang_dir)
.unwrap_or_else(|error| panic!("failed to read {}: {error}", lang_dir.display()))
.filter_map(Result::ok)
.map(|entry| entry.path())
.filter(|path| path.extension().and_then(|value| value.to_str()) == Some("json"))
.collect::<Vec<_>>();
files.sort();
if files.is_empty() {
panic!("lang directory must contain at least one .json language file");
}
let mut generated = String::from("pub const EMBEDDED_LANGUAGE_FILES: &[(&str, &str)] = &[\n");
for path in files {
let name = path
.file_name()
.and_then(|value| value.to_str())
.expect("language filename must be valid UTF-8");
println!("cargo:rerun-if-changed=lang/{name}");
generated.push_str(&format!(
" ({name:?}, include_str!(concat!(env!(\"CARGO_MANIFEST_DIR\"), \"/lang/{name}\"))),\n"
));
}
generated.push_str("];\n");
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR"));
fs::write(out_dir.join("languages.rs"), generated).expect("failed to generate embedded languages");
}