2 个版本

0.0.2 2023年10月1日
0.0.1 2023年5月1日

#282 in 模板引擎


用于 3 个 Crates(通过 wakflo-core

Apache-2.0 OR MIT

105KB
2K SLoC

瑞恩模板引擎

基于 https://github.com/bheisler/TinyTemplate


lib.rs:

瑞恩

瑞恩是一个基于 TinyTemplate 的最小化模板库,最初是为在 Criterion.rs 中使用而设计的。它故意不提供完整功能模板引擎的所有功能,但作为回报,它提供简单的 API、清晰的模板语法、良好的性能以及非常少的依赖。

功能

最重要的功能如下(有关模板语法的详细信息,请参阅 语法 模块)

  • 渲染值 - { myvalue }
  • 条件语句 - {{ if foo }}Foo 是 true{{ else }}Foo 是 false{{ endif }}
  • 循环 - {{ for value in row }}{value}{{ endfor }}
  • 可定制的值格式化器 { value | my_formatter }
  • {{ call my_template with foo }}

限制

Rion 的设计假设模板是静态字符串,无论是使用字符串字面量还是使用 include_str! 宏。因此,它从模板文本本身借用 &str 切片,并在渲染过程中使用它们。尽管可以使用 Rion 与在运行时加载的模板字符串一起使用,但这并不推荐。

此外,Rion 只能将模板渲染到字符串中。如果您需要将模板直接渲染到套接字或文件,Rion 可能不适合您。

示例

#[macro_use]
extern crate serde_derive;
extern crate rion;

use rion::Rion;
use std::error::Error;

#[derive(Serialize)]
struct Context {
    name: String,
}

static TEMPLATE : &'static str = "Hello {name}!";

pub fn main() -> Result<(), Box<dyn Error>> {
    let mut tt = Rion::new();
    tt.add_template("hello", TEMPLATE)?;

    let context = Context {
        name: "World".to_string(),
    };

    let rendered = tt.render("hello", &context)?;
    println!("{}", rendered);

    Ok(())
}

依赖项

~3.5–5MB
~98K SLoC