use std::{
fs::{self, File},
io::Write,
path::Path,
};
pub fn generate(config_dir: &Path, out_path: &Path) -> std::io::Result<()> {
let mut mod_rs = String::new();
mod_rs.push_str("\n/// Generated by Luminos Config\n/// DO NOT EDIT MANUALLY!\n");
for entry in fs::read_dir(config_dir)? {
let entry = entry?;
let path = entry.path();
if path.is_file() && path.extension().and_then(|s| s.to_str()) == Some("rs") {
match path.file_stem().and_then(|s| s.to_str()) {
Some("mod") | None => {} Some(name) => {
mod_rs.push_str(&format!("pub mod {};\n", name));
}
}
}
}
mod_rs.push_str("\npub fn load_config() -> luminos_config::Config {\n");
mod_rs.push_str(" let mut cfg = luminos_config::Config::new();\n");
for entry in fs::read_dir(config_dir)? {
let entry = entry?;
let path = entry.path();
if path.is_file() && path.extension().and_then(|s| s.to_str()) == Some("rs") {
match path.file_stem().and_then(|s| s.to_str()) {
Some("mod") | None => {} Some(name) => {
mod_rs.push_str(&format!(" cfg.insert_section(\"{0}\", &{0}::config());\n", name));
}
}
}
}
mod_rs.push_str(" cfg\n}\n");
let mut file = File::create(out_path)?;
file.write_all(mod_rs.as_bytes())?;
Ok(())
}