use std::{collections::BTreeMap, path::PathBuf};
use crate::{
env::TemplateEnv, error::EvalResult, input::TemplateInput, loader::TemplateLoader,
output::Output, renderer::TemplateRenderer,
};
#[derive(Debug)]
pub struct Femstache {
loader: TemplateLoader,
}
impl Femstache {
pub fn new(root: impl Into<PathBuf>) -> Self {
let loader = TemplateLoader::new(root);
Self { loader }
}
pub fn render(&self, path: &str, inputs: &impl TemplateInput) -> EvalResult<String> {
let template = self.loader.load(path)?;
let env = TemplateEnv::new(inputs);
let mut renderer = TemplateRenderer::new(env, BTreeMap::new(), Some(self.loader.clone()));
let mut output = Output::String(String::new());
renderer.render_document(&template.doc, &mut output)?;
Ok(output.into_inner())
}
}