#rhai #template #logic #customizable

rhai-tpl

使用 rhai 进行逻辑处理的简单模板引擎

3 个版本

0.1.2 2023年9月18日
0.1.1 2023年8月29日
0.1.0 2023年8月11日

#273模板引擎

Download history 47/week @ 2024-03-25 30/week @ 2024-04-01 50/week @ 2024-04-08 45/week @ 2024-04-15 12/week @ 2024-04-22 2/week @ 2024-04-29 24/week @ 2024-05-06 28/week @ 2024-05-13 16/week @ 2024-05-20 8/week @ 2024-06-03 14/week @ 2024-06-10 10/week @ 2024-06-17 12/week @ 2024-06-24 54/week @ 2024-07-01 24/week @ 2024-07-08

每月101下载

MIT 协议

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: WriteS: 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