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
每月下载量 12,840 次
被 12 个 库使用(直接使用 9 个)
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-macros
的template!
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