summaryrefslogtreecommitdiffstats
path: root/crates/driver/src/template.rs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-10-28 18:29:57 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-10-28 18:31:02 +0200
commit86f4c08b81e2129b5d1012c1350e68e3c0560282 (patch)
tree750c520fcf6518d96a51d84dd279e437203518d1 /crates/driver/src/template.rs
parentb35a75f4cb5417bb464639079d266fd708549b32 (diff)
downloadrebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.tar
rebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.zip
Rename executor to driver
Diffstat (limited to 'crates/driver/src/template.rs')
-rw-r--r--crates/driver/src/template.rs44
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();
+}