use std::fmt::Write as FmtWrite;
use std::fs;
use std::path::Path;
use crate::schema::model::*;
pub fn generate_rust(
spec: &CimSpecification,
others: &[&CimSpecification],
output_dir: &Path,
) -> Result<(), Box<dyn std::error::Error>> {
fs::create_dir_all(output_dir)?;
let families: Vec<&CimSpecification> = std::iter::once(spec).chain(others.iter().copied()).collect();
for f in &families {
let file = output_dir.join(format!("{}_classes.rs", f.family.id));
fs::write(file, super::classes_gen::render_classes(f))?;
}
let ids: Vec<&str> = families.iter().map(|f| f.family.id).collect();
fs::write(output_dir.join("mod.rs"), render_mod(&ids))?;
Ok(())
}
fn render_mod(family_ids: &[&str]) -> String {
let mut s = String::new();
writeln!(s, "// Generated by cimgen — do not edit by hand.").unwrap();
writeln!(s).unwrap();
for id in family_ids {
writeln!(s, "pub mod {id}_classes;").unwrap();
}
s
}