apigen-xml 0.1.0

Generate APIs from XML description
// Copyright 2025 Google
// SPDX-License-Identifier: MIT

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(())
    }
}