1个不稳定版本

0.1.0 2024年2月18日

#237模板引擎

每月 22 次下载

MIT/Apache

11KB
201

Aresty

Aresty是一个Rust编译模板库。

链接

使用方法

将以下内容添加到你的 Cargo.toml

[dependencies]
aresty = "0.1"

示例

样本 .rst 模板

<ol>
{{#for i in ints}}
    <li class="{{#if i % 6 == 0}}fizzbuzz{{#else if i % 2 == 0}}fizz{{#else if i % 3 == 0}}buzz{{#else}}none{{/if}}">{{i}}</li>
{{/for}}
</ol>
<ul>
{{#for o in opts}}
    <li>
        {{#match o}}
        {{=None}}Nothing at all
        {{=Some(s)}}It is a "{{s}}"
        {{/match}}
    </li>
{{/for}}
</ul>

即兴宏使用

use std::io::Write;
use aresty::{aresty_render, escape::Escape, escape::NoEscape, Result};

fn hello_world(out: &mut impl Write) -> Result {
    let world = "World!";
    let result: Result = aresty_render!(out, NoEscape, "aresty_examples/src/hello_world.rst");
    result
}

视图结构上的处理宏

use aresty::{aresty, Result, Template};

#[aresty("aresty_examples/src/view.rst")]
struct View<'a> {
    ints: Vec<i32>,
    opts: &'a Vec<Option<String>>,
}

fn main() -> Result {
    let mut out = std::io::stdout();
    let view = View {
        ints: vec![1, 2, 3, 4, 5, 6, 60],
        opts: &vec![None, Some("thing & co".to_string())],
    };
    view.render_html(&mut out)?;
    Ok(())
}

支持的标签

标签 效果
{{expr}} expr 被评估并打印为转义字符
{{{expr}}} expr 被评估并原样打印(不需要转义)
{{!expr}} expr 被评估但不打印(即 let
{{#block}} block 打开(即 ifelseelse ifformatch 等)
{{/block}} block 关闭
{{=expr}} expr 是父 match 块的分支;不需要关闭

依赖

~260–700KB
~17K SLoC