5个不稳定版本

使用旧的Rust 2015

0.3.0 2015年7月10日
0.2.0 2015年7月8日
0.1.2 2015年6月25日
0.1.1 2015年5月10日
0.1.0 2015年4月3日

#70 in 渲染引擎

MIT/Apache

96KB
2K SLoC

查看文档 https://nicolas-cherel.github.io/rumblebars


lib.rs:

Build Status

rumblebars — 一个handlebars模板扩展库

此crate提供了一个用于解析和扩展handlebars模板的库,以便与rust nightly功能构建一起使用

使用cargo build --features nightly --no-default-features

Rumblebars通过所有必须的模板规范,并通过272个handlebars测试[1]。模板评估渲染到io::Writer,因此您可以选择是否将结果保留在内存中。它还支持输入数据,前提是您的数据结构实现了HBData特性(提供Json实现)。

[1] 除外更改分隔符测试套件和一个测试因尾随空格而失败 [2] 所有不涉及javascript的数据和部分测试,以及查看其他情况的注释

HTML转义安全性

所有输出都通过写入到SafeWriting::into_unsafe()进行过滤,这将返回底层的未过滤写入器。

快速开始

示例

API快捷方式由面向对象代码设计提供。

您可以直接将内容渲染到字符串中

extern crate rustc_serialize as serialize;
extern crate rumblebars;
use serialize::json::Json;
use rumblebars::Template;

let data = Json::from_str(r##"{"hello": "hi"}"##).unwrap();

if let Ok(template) = Template::new("{{hello}}") {
  let res = template.eval_to_string(&data).unwrap_or("".to_string());
  assert_eq!(&res, "hi");
}

对于模板解析,您也可以使用rust的常用模式,这些模式利用了类型推断

use rumblebars::Template;
let template: Template = "{{hello}}".parse().unwrap(); // thanks to FromStr

您也可以调用parse()函数

rumblebars::parse("{{hello}}").unwrap();

eval() 相同

extern crate rustc_serialize as serialize;
extern crate rumblebars;
use serialize::json::Json;
use rumblebars::{EvalContext};

let mut out = Vec::new();
rumblebars::eval(&rumblebars::parse("{{hello}}").unwrap(), &Json::Null, &mut out, &EvalContext::new());

辅助函数

辅助函数注册到评估上下文中。它们是封装的闭包(你还可以在其中包含裸函数)必须将内容写入到 out: &mut Writer。如果你需要在渲染到最终的 Writer 之前处理内容,只需将其渲染到缓冲区并将其放入安全写入器中。

要使用你的辅助函数,只需在评估模板之前注册它即可

你可以通过 eval() 控制 EvalContext(自定义辅助函数)和输出

use rumblebars::{Template, HBData, EvalContext};

if let Ok(template) = Template::new("{{hello}}") {
  let mut context = EvalContext::new();
  let mut buf = Vec::new();

  context.register_helper("hello".to_string(), Box::new(
    |params, options, out, hb_context| {
      "hi".write_value(out)
  }));

  if let Ok(_) = template.eval(&"", &mut buf, &context) {
     assert_eq!(String::from_utf8_lossy(&buf), "hi");
  }
}

依赖项

~2.4–3.5MB
~66K SLoC