lento_build/
lib.rs

1use std::env;
2use std::fs::File;
3use std::io::Write;
4use std::path::PathBuf;
5use std::str::FromStr;
6
7pub fn auto_generate_loader() {
8    println!("cargo:rerun-if-env-changed=LENTO_JS_DIR");
9    if let Ok(js_dir) = env::var("LENTO_JS_DIR") {
10        generate_static_loader(js_dir.as_str(), "target/lento_js_loader.in");
11    } else {
12        let js_url = env::var("LENTO_JS_URL").unwrap_or("http://localhost:7800".to_string());
13        generate_dev_loader(js_url.as_str(), "target/lento_js_loader.in");
14    }
15}
16
17pub fn generate_dev_loader(url: &str, output_dir: &str) {
18    let mut code = format!("Box::new(lento::loader::DevModuleLoader::new(Some(\"{}\")))", url);
19    write_code(code.as_str(), output_dir);
20}
21
22pub fn generate_static_loader(js_dir: &str, output_dir: &str) {
23    let path = PathBuf::from_str(&js_dir).unwrap();
24    let canonical_path = path.canonicalize().unwrap().to_string_lossy().to_string();
25    let files = path.read_dir().unwrap();
26
27    let mut code = String::new();
28    code.push_str("{\n");
29    code.push_str("let mut loader = lento::loader::StaticModuleLoader::new();\n");
30    for f in files {
31        let file_name = f.unwrap().file_name();
32        let name = file_name.to_str().unwrap();
33        code.push_str(&format!("loader.add_module(\"{}\".to_string(), include_str!(\"{}/{}\").to_string());\n", name, canonical_path, name));
34    }
35    code.push_str("loader\n");
36    code.push_str("}");
37    write_code(code.as_str(), output_dir);
38}
39
40fn write_code(code: &str, output_dir: &str) {
41    let mut file = File::create(output_dir).unwrap();
42    file.write_all(code.as_bytes()).unwrap();
43}