diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-28 18:29:57 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-28 18:31:02 +0200 |
commit | 86f4c08b81e2129b5d1012c1350e68e3c0560282 (patch) | |
tree | 750c520fcf6518d96a51d84dd279e437203518d1 /crates/driver/src/template.rs | |
parent | b35a75f4cb5417bb464639079d266fd708549b32 (diff) | |
download | rebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.tar rebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.zip |
Rename executor to driver
Diffstat (limited to 'crates/driver/src/template.rs')
-rw-r--r-- | crates/driver/src/template.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/crates/driver/src/template.rs b/crates/driver/src/template.rs new file mode 100644 index 0000000..b663e7d --- /dev/null +++ b/crates/driver/src/template.rs @@ -0,0 +1,44 @@ +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<String> { + self.tpl_raw + .render_template(input, args) + .map_err(Error::new) + } + + pub fn eval(&self, input: &str, args: &TaskArgs) -> Result<String> { + self.tpl.render_template(input, args).map_err(Error::new) + } +} + +lazy_static! { + pub static ref ENGINE: TemplateEngine = TemplateEngine::new(); +} |