#escaping #boilerplate #html #template #wrapper #formatter

html-escaper

核心::fmt::Formatter 的 HTML 转义包装器

3 个版本 (破坏性更新)

0.2.0 2022年9月18日
0.1.0 2022年9月18日
0.0.0 2022年9月18日

#240模板引擎

Download history 464/week @ 2024-03-13 623/week @ 2024-03-20 879/week @ 2024-03-27 825/week @ 2024-04-03 2282/week @ 2024-04-10 1912/week @ 2024-04-17 732/week @ 2024-04-24 546/week @ 2024-05-01 403/week @ 2024-05-08 271/week @ 2024-05-15 340/week @ 2024-05-22 281/week @ 2024-05-29 285/week @ 2024-06-05 359/week @ 2024-06-12 346/week @ 2024-06-19 343/week @ 2024-06-26

每月 1,390 次下载
6 Crates 中使用 (5 个直接使用)

CC0 许可证

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");

示例

有关更多信息和使用示例,请参阅 文档

无运行时依赖