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 渲染引擎
96KB
2K SLoC
lib.rs
:
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