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