3 个版本 (破坏性更新)
0.2.0 | 2022年9月18日 |
---|---|
0.1.0 | 2022年9月18日 |
0.0.0 | 2022年9月18日 |
#240 在 模板引擎
每月 1,390 次下载
在 6 个 Crates 中使用 (5 个直接使用)
4KB
87 行
boilerplate
boilerplate
是一个无运行时依赖的静态检查 Rust 模板引擎。可以使用两种方式使用 boilerplate,一种是类似函数的宏 boilerplate::boilerplate
,另一种是 derive 宏 boilerplate::Boilerplate
。
类似函数的宏
use boilerplate::boilerplate;
let foo = true;
let bar: Result<&str, &str> = Ok("yassss");
let output = boilerplate!(
"%% if foo {
Foo was true!
%% }
%% match bar {
%% Ok(ok) => {
Pretty good: {{ ok }}
%% }
%% Err(err) => {
Not so great: {{ err }}
%% }
%% }
");
assert_eq!(output, "Foo was true!\nPretty good: yassss\n");
Derive 宏
在您想要用作模板上下文的类型上 derive Boilerplate
use boilerplate::Boilerplate;
#[derive(Boilerplate)]
struct MyTemplateTxt {
foo: bool,
bar: Result<String, Box<dyn std::error::Error>>,
}
boilerplate
模板代码和插值是 Rust 语法,因此错误在编译时进行检查,模板语言易于学习
%% if self.foo {
Foo was true!
%% }
%% match &self.bar {
%% Ok(ok) => {
Pretty good: {{ ok }}
%% }
%% Err(err) => {
Not so great: {{ err }}
%% }
%% }
Boilerplate
宏提供了一个 Display
实现,因此您可以实例化一个模板上下文并将其转换为字符串
let rendered = MyTemplateTxt { foo: true, bar: Ok("hello".into()) }.to_string();
或者在使用格式字符串时使用它
println!("The output is: {}", MyTemplateTxt { foo: false, bar: Err("hello".into()) });
boilerplate
的实现非常简单。尝试使用 cargo-expand 展开 Boilerplate
宏,并检查派生的 Display
实现和调试模板问题。
快速入门
将 boilerplate
添加到项目的 Cargo.toml
[dependencies]
boilerplate = "*"
在 templates/my-template.txt
中创建模板
Foo is {{self.n}}!
定义、实例化和渲染模板上下文
use boilerplate::Boilerplate;
#[derive(Boilerplate)]
struct MyTemplateTxt {
n: u32,
}
assert_eq!(MyTemplateTxt { n: 10 }.to_string(), "Foo is 10!\n");
示例
有关更多信息和使用示例,请参阅 文档。