use std::fs::File;
use std::io::Write;
use minijinja::{context, Environment};
use crate::common::*;
use crate::generator::types::Writer;
pub struct RustWriter;
impl Writer for RustWriter {
fn write(
&self,
api: &Api,
gen_file: &GeneratedFile,
output: &mut File,
) -> Result<(), ApiGenError> {
let mut env = Environment::new();
env.set_loader(minijinja::path_loader("src/generator/templates"));
let tmpl = env.get_template("rust.jinja")?;
let defs: Vec<&Definition> = gen_file
.instantiations
.iter()
.filter_map(|def_name| api.definitions.iter().find(|d| d.name == *def_name))
.collect();
write!(
output,
"{}",
tmpl.render(context! {
year => api.copyright.year,
holder => api.copyright.holder,
spdx => api.copyright.spdx,
defs => defs,
})?
)?;
Ok(())
}
}