3 个版本 (重大更新)
0.3.0 | 2023年4月25日 |
---|---|
0.2.0 | 2023年4月3日 |
0.1.0 | 2023年4月3日 |
在 模板引擎 中排名第 253
每月下载 62 次
在 3 个 包中使用
16KB
245 代码行
funcfmt |
funcfmt 是一个简单、轻量级的模板引擎库,允许使用自定义运行时上下文和函数特性进行模板化。它最初是为 exifrename 创建的,以便高效地处理数千个 EXIF 对象的格式和一组回调。
文档
文档可在 docs.rs 上找到,或通过 cargo doc --open
查看文档。
用法
要将 funcfmt 添加到依赖项
cargo add funcfmt
funcfmt 的基本流程如下所示
- 给定一个名为
FormatMap<T>
的formatters
,调用formatters.to_format_pieces()
,它会将所有内容预处理成一个FormatPieces<T>
,其中&T
是回调函数将接受的唯一参数。这允许在处理事物时避免重新解析格式化程序和遍历模板。 - 在
FormatPieces<T>
上调用 .render(data)。
以下是一个使用 String
传递的小示例,尽管您可以传递任何类型的对象
use funcfmt::{fm, FormatMap, Render, ToFormatPieces};
fn main() {
let formatters = FormatMap::from([
fm!("foo", |data| Some(format!("foo: {data}"))),
fm!("bar", |data| Some(format!("bar: {data}"))),
fm!("baz", |data| Some(format!("baz: {data}"))),
]);
let fp = formatters.to_format_pieces("{foo}, {bar}").unwrap();
// foo: some data, bar: some data
let data_one = String::from("some data");
println!("{}", fp.render(&data_one).unwrap());
// foo: other data, bar: other data
// note that this doesn't require processing the format again
let data_two = String::from("other data");
println!("{}", fp.render(&data_two).unwrap());
}
依赖项
~0.5–1MB
~21K SLoC