use handlebars::Handlebars; use lazy_static::lazy_static; use common::error::*; use crate::args::TaskArgs; fn escape(s: &str) -> String { format!("'{}'", s.replace("'", "'\\''")) } #[derive(Debug)] pub struct TemplateEngine { tpl: Handlebars<'static>, tpl_raw: Handlebars<'static>, } impl TemplateEngine { pub fn new() -> Self { let mut tpl = Handlebars::new(); tpl.set_strict_mode(true); tpl.register_escape_fn(escape); let mut tpl_raw = Handlebars::new(); tpl_raw.set_strict_mode(true); tpl_raw.register_escape_fn(handlebars::no_escape); TemplateEngine { tpl, tpl_raw } } pub fn eval_raw(&self, input: &str, args: &TaskArgs) -> Result { self.tpl_raw .render_template(input, args) .map_err(Error::new) } pub fn eval(&self, input: &str, args: &TaskArgs) -> Result { self.tpl.render_template(input, args).map_err(Error::new) } } lazy_static! { pub static ref ENGINE: TemplateEngine = TemplateEngine::new(); }