1use crate::context::Context;
2use crate::helpers::{HelperDef, HelperResult};
3use crate::output::Output;
4use crate::registry::Registry;
5use crate::render::{Helper, RenderContext, Renderable};
6
7#[derive(Clone, Copy)]
8pub struct RawHelper;
9
10impl HelperDef for RawHelper {
11 fn call<'reg: 'rc, 'rc>(
12 &self,
13 h: &Helper<'reg, 'rc>,
14 r: &'reg Registry<'reg>,
15 ctx: &'rc Context,
16 rc: &mut RenderContext<'reg, 'rc>,
17 out: &mut dyn Output,
18 ) -> HelperResult {
19 let tpl: Option<&Template> = h.template();
20 if let Some(t: &Template) = tpl {
21 t.render(registry:r, context:ctx, rc, out)
22 } else {
23 Ok(())
24 }
25 }
26}
27
28pub static RAW_HELPER: RawHelper = RawHelper;
29
30#[cfg(test)]
31mod test {
32 use crate::registry::Registry;
33
34 #[test]
35 fn test_raw_helper() {
36 let mut handlebars = Registry::new();
37 assert!(handlebars
38 .register_template_string("t0", "a{{{{raw}}}}{{content}}{{else}}hello{{{{/raw}}}}")
39 .is_ok());
40
41 let r = handlebars.render("t0", &());
42 assert_eq!(r.ok().unwrap(), "a{{content}}{{else}}hello");
43 }
44}
45