57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
|
use std::{
|
||
|
env,
|
||
|
fs::File,
|
||
|
io::Write,
|
||
|
io::{BufWriter, Read},
|
||
|
path::Path,
|
||
|
};
|
||
|
|
||
|
use dotenvy::{dotenv, dotenv_iter};
|
||
|
use glob::glob;
|
||
|
use phf_codegen::Map;
|
||
|
|
||
|
fn main() {
|
||
|
println!("cargo:rerun-if-changed={}", dotenv().unwrap().display());
|
||
|
for item in dotenv_iter().unwrap() {
|
||
|
let (key, value) = item.unwrap();
|
||
|
println!("cargo:rustc-env={key}={value}");
|
||
|
}
|
||
|
let path = Path::new(&env::var("OUT_DIR").unwrap()).join("codegen.rs");
|
||
|
let mut file = BufWriter::new(File::create(&path).unwrap());
|
||
|
let template_dir = [&env::var("CARGO_MANIFEST_DIR").unwrap(), "/src/templates"].concat();
|
||
|
println!("cargo:rerun-if-changed={}", template_dir);
|
||
|
let pattern = [&template_dir, "/**/*.html"].concat();
|
||
|
let mut map: Map<String> = phf_codegen::Map::new();
|
||
|
|
||
|
let paths = glob(&pattern).unwrap();
|
||
|
for path in paths {
|
||
|
match path {
|
||
|
Ok(path) => {
|
||
|
let slug_path = path.clone();
|
||
|
let slug: String = slug_path
|
||
|
.strip_prefix(&template_dir)
|
||
|
.unwrap()
|
||
|
.as_os_str()
|
||
|
.to_str()
|
||
|
.unwrap()
|
||
|
.strip_suffix(".html")
|
||
|
.unwrap()
|
||
|
.into(); // eek
|
||
|
let mut file = File::open(path.clone()).unwrap();
|
||
|
let mut content = "r####\"".to_string();
|
||
|
file.read_to_string(&mut content).unwrap();
|
||
|
content.push_str("\"####");
|
||
|
println!("cargo:warning={}\n{}", &slug, &content);
|
||
|
map.entry(slug, &content);
|
||
|
}
|
||
|
Err(_) => todo!(),
|
||
|
}
|
||
|
}
|
||
|
writeln!(
|
||
|
&mut file,
|
||
|
"static TEMPLATES: phf::Map<&'static str, &'static str> = {};",
|
||
|
map.build()
|
||
|
)
|
||
|
.unwrap();
|
||
|
}
|