From efd629b243e1a6135da85c6f64d999ba939419ec Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Mon, 21 May 2018 00:29:33 -0500 Subject: [PATCH] Initial commit of handlebars helpers library --- Cargo.toml | 8 ++++++++ src/lib.rs | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 Cargo.toml create mode 100644 src/lib.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a094a0b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "handlebars-helpers" +version = "0.1.0" +authors = ["Adrian Malacoda "] + +[dependencies] +handlebars = "0.32.2" +serde_json = "^1.0.0" diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..0568b3d --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,25 @@ +extern crate handlebars; +use serde_json::Value; +use handlebars::{Handlebars, Helper, HelperDef, RenderContext, RenderError}; + +extern crate serde_json; + +fn json_format_helper(helper: &Helper, _: &Handlebars, render_context: &mut RenderContext) -> Result<(), RenderError> { + let param = helper.param(0).ok_or(RenderError::new("Param 0 is required for format helper.",),)?; + render_context.writer.write(param.value().to_string().into_bytes().as_ref())?; + Ok(()) +} + +struct EqHelper; +impl HelperDef for EqHelper { + fn call_inner(&self, helper: &Helper, _: &Handlebars, _: &mut RenderContext) -> Result, RenderError> { + let param1 = helper.param(0).ok_or(RenderError::new("Param 0 is required for eq helper.",),)?.value(); + let param2 = helper.param(1).ok_or(RenderError::new("Param 1 is required for eq helper.",),)?.value(); + Ok(Some(Value::Bool(param1 == param2))) + } +} + +pub fn register(handle: &mut Handlebars) { + handle.register_helper("JSONstringify", Box::new(json_format_helper)); + handle.register_helper("eq", Box::new(EqHelper)); +}