use std::fs::File;
use std::io::Write;
use minijinja::{context, Environment};
use crate::common::*;
use crate::generator::types::Writer;
pub struct HeaderWriter;
impl Writer for HeaderWriter {
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("header.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,
gen_file => gen_file,
})?
)?;
Ok(())
}
}