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