2 个版本

0.1.1 2023年5月19日
0.1.0 2023年5月19日

#473 in 模板引擎

MIT/Apache

7KB
104

目的

Rust 的 format! 宏需要在编译时将字符串模板作为字符串字面量传递。此 crate 使用众所周知的模板语言 handlebars 允许在运行时传递所有内容。使用整个 handlebars 确实有些过度,但对于仅仅创建一个易用的字符串插值函数来说,我对自己编写的库的准确性更有信心。我没有修改 handlebars 的语法,所以很遗憾,我不能完全复制 format! 的语法。

用法

您可以使用 Template::new() 初始化一个空的模板,然后修改模板和/或推送新的键/值对。这并不比直接使用 handlebars 更简洁,但这是为了完整性。

let mut s = Serp::default();
s.template = "{{sample}} {{string}}".to_string();
s.push("sample".into(), "hello".into());
s.push("string".into(), "world".into());

assert_eq!(s.format(), "hello world");

主要功能是 serp,它接受一个模板作为 String 和一个键/值对的 HashMap<String, String>

let template = "Hello, {{name}}".to_string();
let map = HashMap::from([("name".into(), "world".into())]);

assert_eq!(serp(&template, &map), "Hello, world".to_string());

最终方法是对最终产品的简短方式,用于使用 serpt 接受一个模板作为 &str 和一个键/值元组的数组作为 &[(&str, &str)]

let t = t("{{sample}} {{string}}", &[("sample", "Hello"), ("string", "World")]);
assert_eq!(t, "Hello World");

最后,最懒惰的例子,它使用一些约定来同时遵循标准的 handlebars 并简洁。 a 仅接受一个模板作为 &str 和一个字符串数组 &[&str]。模板括号是编号的,从 0 开始。

let a = a("{{0}} {{1}}", &["Hello", "World"]);
assert_eq!(a, "Hello World");

许可证

MIT 和 Apache 2.0 双许可

依赖项

~2.8–4MB
~80K SLoC