11 个版本
0.3.3 | 2024 年 6 月 29 日 |
---|---|
0.3.2 | 2024 年 6 月 25 日 |
0.3.0 | 2023 年 8 月 31 日 |
0.2.3 | 2023 年 7 月 26 日 |
0.0.1-保留 | 2022 年 2 月 22 日 |
#18 在 模板引擎
63,210 每月下载量
在 10 个 Crates 中使用 (6 直接)
78KB
1.5K SLoC
subst
字符串和字节字符串的类似壳变量替换。
功能
- 在
&str
或在&[u8]
中执行替换。 - 提供自定义变量映射或使用环境变量。
- 短格式:
"Hello $name!"
- 长格式:
"Hello ${name}!"
- 默认值:
"Hello ${name:person}!"
- 在默认值中递归替换:
"${XDG_CONFIG_HOME:$HOME/.config}/my-app/config.toml"
- 在 TOML 或 YAML 数据中的所有字符串值上执行替换(可选,需要
toml
或yaml
功能)。
变量名可以由字母数字字符和下划线组成。它们可以以数字开头。
如果您想快速对字符串执行替换,请使用 substitute()
或 substitute_bytes()
。
也可以使用模板类型之一。模板会一次性解析源字符串或字节,并且可以根据需要扩展多次。有四种不同的模板类型可供选择
Template
:借用源字符串。TemplateBuf
:拥有源字符串。ByteTemplate
:借用源字节。ByteTemplateBuf
:拥有源字节。
示例
可以使用 [substitute()
][substitute] 函数对 &str
进行替换。变量可以是 HashMap
或 BTreeMap
。
let mut variables = HashMap::new();
variables.insert("name", "world");
assert_eq!(subst::substitute("Hello $name!", &variables)?, "Hello world!");
变量也可以使用 Env
映射直接从环境中获取。
assert_eq!(
subst::substitute("$XDG_CONFIG_HOME/my-app/config.toml", &subst::Env)?,
"/home/user/.config/my-app/config.toml",
);
还可以使用 [substitute_bytes()
][substitute_bytes] 函数对字节字符串进行替换。
let mut variables = HashMap::new();
variables.insert("name", b"world");
assert_eq!(subst::substitute_bytes(b"Hello $name!", &variables)?, b"Hello world!");
您还可以一次性解析模板并多次扩展它
let mut variables = HashMap::new();
let template = subst::Template::from_str("Welcome to our hair salon, $name!")?;
for name in ["Scrappy", "Coco"] {
variables.insert("name", name);
let message = template.expand(&variables)?;
println!("{}", message);
}
依赖项
~0.4–1.2MB
~17K SLoC