neyuki 0.6.2

A small Lua-like scripting language implemented in Rust
use std::env;
use std::fs;
use std::path::PathBuf;

fn main() {
    let manifest_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
    let lib_dir = manifest_dir.join("lib");
    println!("cargo:rerun-if-changed={}", lib_dir.display());

    let mut libraries = fs::read_dir(&lib_dir)
        .unwrap_or_else(|err| panic!("failed to read {}: {}", lib_dir.display(), err))
        .map(|entry| entry.expect("failed to read library entry").path())
        .filter(|path| path.extension().is_some_and(|ext| ext == "nyk"))
        .collect::<Vec<_>>();
    libraries.sort();

    let mut generated = String::from("&[\n");
    for path in libraries {
        let name = path
            .file_stem()
            .and_then(|stem| stem.to_str())
            .unwrap_or_else(|| panic!("invalid library filename: {}", path.display()));
        generated.push_str(&format!(
            "    (\"@neyuki/{name}\", include_str!({:?})),\n",
            path.to_string_lossy()
        ));
    }
    generated.push_str("]\n");

    let output = PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("bundled_libraries.rs");
    fs::write(&output, generated)
        .unwrap_or_else(|err| panic!("failed to write {}: {}", output.display(), err));
}