#![warn(missing_docs)]
#[async_trait::async_trait]
pub trait TemplateRenderer: Send + Sync {
fn render(&self, template_name: &str, context: &serde_json::Value) -> crate::TemplateResult<String>;
async fn render_async(&self, template_name: &str, context: &serde_json::Value) -> crate::TemplateResult<String> {
Ok(self.render(template_name, context)?)
}
fn register_template(&mut self, name: &str, content: &str) -> crate::TemplateResult<()>;
fn register_template_file(&mut self, name: &str, path: &std::path::Path) -> crate::TemplateResult<()>;
fn register_templates_from_dir(&mut self, dir: &std::path::Path, extension: Option<&str>) -> crate::TemplateResult<()>;
}
#[cfg(feature = "jinja")]
pub mod jinja;
#[cfg(feature = "dejavu")]
pub mod dejavu;
#[cfg(feature = "liquid")]
pub mod liquid;