7 个版本 (稳定版)

3.0.1 2024年2月20日
3.0.0 2024年2月12日
2.0.1 2023年6月26日
2.0.0 2023年4月26日
0.0.0 2023年2月5日

模板引擎 中排名第 30

Download history 2448/week @ 2024-04-23 2605/week @ 2024-04-30 2491/week @ 2024-05-07 2599/week @ 2024-05-14 2375/week @ 2024-05-21 1890/week @ 2024-05-28 4202/week @ 2024-06-04 3286/week @ 2024-06-11 3542/week @ 2024-06-18 2802/week @ 2024-06-25 2942/week @ 2024-07-02 2432/week @ 2024-07-09 3034/week @ 2024-07-16 2886/week @ 2024-07-23 3029/week @ 2024-07-30 3401/week @ 2024-08-06

每月下载量 12,840
12 库使用(直接使用 9 个)

Apache-2.0 或 MIT

37KB
819 行代码(不包括注释)

leon

极简字符串模板。

有关最新文档,请访问此处


lib.rs:

极简字符串模板。

Leon 将模板字符串解析为令牌列表,然后替换提供的值。与其他模板引擎不同,它非常简单:不支持逻辑,只进行替换。它甚至比 format!() 更简单,尽管语法相似。

语法

it is better to rule { group }
one can live {adverb} without power

替换由 {} 表示。大括号内的内容(去除任何空白)是键。大括号外的任何文本保持不变。

要转义大括号,请使用 \{\}。要转义反斜杠,请使用 \\。键不能包含转义字符。

\{ leon \}

以下示例,给定值 group = "no one"adverb = "honourably",将渲染为

it is better to rule no one
one can live honourably without power
{ leon }

用法

首先将模板解析为令牌列表

use leon::Template;

let template = Template::parse("hello {name}").unwrap();

可以检查模板,例如检查键是否存在

#
assert!(template.has_key("name"));

可以将模板渲染为字符串

use leon::vals;
#
assert_eq!(
    template.render(
        &&vals(|_key| Some("marcus".into()))
    ).unwrap().as_str(),
    "hello marcus",
);

…或写入器

use std::io::Write;
use leon::vals;
#
let mut buf: Vec<u8> = Vec::new();
template.render_into(
    &mut buf,
    &&vals(|key| if key == "name" {
        Some("julius".into())
    } else {
        None
    })
).unwrap();
assert_eq!(buf.as_slice(), b"hello julius");

…使用映射

use std::collections::HashMap;
let mut values = HashMap::new();
values.insert("name", "brutus");
assert_eq!(template.render(&values).unwrap().as_str(), "hello brutus");

…或使用您自己的类型,如果您实现了 Values 特性

use std::borrow::Cow;
use leon::Values;

struct MyMap {
  name: &'static str,
}
impl Values for MyMap {
   fn get_value(&self, key: &str) -> Option<Cow<'_, str>> {
      if key == "name" {
        Some(self.name.into())
     } else {
       None
    }
   }
}
#
let values = MyMap { name: "pontifex" };
assert_eq!(template.render(&values).unwrap().as_str(), "hello pontifex");

编译时解析

您可以使用与常规解析器语法完全相同的leon-macrostemplate! proc-macro,或者这个crate的template!规则宏,它需要稍有不同的语法,但不会引入额外的依赖。在任一情况下,都需要将leon库作为运行时依赖。

错误

如果模板解析失败,Leon将返回ParseError。这可能是由于括号不匹配或键为空。

如果向[Template::render()]传递的键值中缺少键,Leon将返回RenderError::MissingKey,除非提供了默认值,通过Template.default

它还会在使用[Template::render_into()]时传递I/O错误。

依赖关系

~0.9–9.5MB
~93K SLoC