3 个版本
0.1.2 | 2023年9月18日 |
---|---|
0.1.1 | 2023年8月29日 |
0.1.0 | 2023年8月11日 |
#273 在 模板引擎
每月101次下载
14KB
321 行
rhai-tpl
使用 rhai
进行逻辑的自定义模板引擎。
模板化
使用 <% %>
运行不希望写入模板的逻辑,并使用 <%= %>
进行写入。
<%
let a = [42, 123, 999, 0, true, "hello", "world!", 987.6543];
// Loop through the array
for (item, count) in a { %>
Item #<%= count + 1 %> = <%= item %>
<% } %>
返回值
Item #1 = 42
Item #2 = 123
Item #3 = 999
Item #4 = 0
Item #5 = true
Item #6 = hello
Item #7 = world!
Item #8 = 987.6543
渲染
rhai_tpl::Engine
使渲染和自定义成为可能。它有两个泛型参数:W: Write
和 S: State
,这是您在修改引擎时可以使用的状态。对于实现 Clone + Send + Sync + 'static
的任何类型,它默认实现。
let f = std::fs::OpenOptions::new()
.create(true)
.write(true)
.open(&filepath)?;
let engine = rhai_tpl::Engine::new::<std::fs::File, ()>();
let input = ""; // you'd fetch this from a file or whatever
let tpl = engine.compile(input)?;
tpl.render(f, ())?;
自定义
您可以通过添加/修改用户可用的函数直接修改引擎
let mut engine = Engine::new::<std::fs::File, ()>();
engine.register_fn(
"write",
|tw: &mut TemplateWriter<std::fs::File, ()>,
d: Dynamic|
-> Result<(), Box<EvalAltResult>> {
tw.write_all(format!("overloaded: {d}").as_bytes())
.map_err(|e| Box::new(EvalAltResult::from(e.to_string())))?;
Ok(())
},
);
此修改覆盖了 rhai::Dynamic
类型的默认 write
输出,并使用 overloaded:
作为前缀。这并不特别有用,但它给您一个想法。
依赖关系
~6–12MB
~97K SLoC