macro_rules! handlebars_helper { ($struct_name:ident: |$($name:ident: $tpe:tt$(<$($gen:ty),+>)?),* $($(,)?{$($hash_name:ident: $hash_tpe:tt=$dft_val:literal),*})? $($(,)?*$args:ident)? $($(,)?**$kwargs:ident)?| $body:expr ) => { ... }; (@as_json_value $x:ident, object) => { ... }; (@as_json_value $x:ident, array) => { ... }; (@as_json_value $x:ident, str) => { ... }; (@as_json_value $x:ident, i64) => { ... }; (@as_json_value $x:ident, u64) => { ... }; (@as_json_value $x:ident, f64) => { ... }; (@as_json_value $x:ident, bool) => { ... }; (@as_json_value $x:ident, null) => { ... }; (@as_json_value $x:ident, Json) => { ... }; (@as_json_value $x:ident, $tpe:tt$(<$($gen:ty),+>)?) => { ... }; }
Expand description
Macro that allows you to quickly define a handlebars helper by passing a name and a closure.
There are several types of arguments available to closure:
- Parameters are mapped to closure arguments one by one. Any declared parameters are required
- Hash are mapped as named arguments and declared in a bracket block. All named arguments are optional so default value is required.
- An optional
*args
provides a vector of all helper parameters. - An optional
**kwargs
provides a map of all helper hash.
Examples
#[macro_use] extern crate handlebars;
#[macro_use] extern crate serde_json;
handlebars_helper!(is_above_10: |x: u64| x > 10);
handlebars_helper!(is_above: |x: u64, { compare: u64 = 10 }| x > compare);
let mut handlebars = handlebars::Handlebars::new();
handlebars.register_helper("is-above-10", Box::new(is_above_10));
handlebars.register_helper("is-above", Box::new(is_above));
let result = handlebars
.render_template("{{#if (is-above-10 12)}}great!{{else}}okay{{/if}}", &json!({}))
.unwrap();
assert_eq!(&result, "great!");
let result2 = handlebars
.render_template("{{#if (is-above 12 compare=10)}}great!{{else}}okay{{/if}}", &json!({}))
.unwrap();
assert_eq!(&result2, "great!");