File: helper_function_lifetime.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (35 lines) | stat: -rw-r--r-- 936 bytes parent folder | download | duplicates (6)
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()
    );
}