1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
use handlebars::*;
fn ifcond<'reg, 'rc>(
h: &Helper<'rc>,
handle: &'reg Handlebars,
ctx: &'rc Context,
render_ctx: &mut RenderContext<'reg, 'rc>,
out: &mut dyn Output,
) -> Result<(), RenderError> {
let cond = h.param(0).and_then(|v| v.value().as_bool()).ok_or(
RenderErrorReason::ParamTypeMismatchForName("ifcond", "0".to_owned(), "bool".to_owned()),
)?;
let temp = if cond { h.template() } else { h.inverse() };
match temp {
Some(t) => t.render(handle, ctx, render_ctx, out),
None => Ok(()),
}
}
#[test]
fn test_helper() {
let mut handlebars = Handlebars::new();
// register some custom helpers
handlebars.register_helper("ifcond", Box::new(ifcond));
// make data and render it
let data = true;
assert_eq!(
"yes",
handlebars
.render_template("{{#ifcond this}}yes{{/ifcond}}", &data)
.unwrap()
);
}
|