#template #templating #traits #formatting #once #data

funcfmt

"一次解析,多次填充" 的函数特性模板引擎

3 个版本 (重大更新)

0.3.0 2023年4月25日
0.2.0 2023年4月3日
0.1.0 2023年4月3日

模板引擎 中排名第 253

Download history 19/week @ 2024-03-11 7/week @ 2024-03-18 16/week @ 2024-03-25 72/week @ 2024-04-01 5/week @ 2024-04-08 4/week @ 2024-04-15 10/week @ 2024-04-22 1/week @ 2024-04-29 9/week @ 2024-05-06 23/week @ 2024-05-13 27/week @ 2024-05-20 7/week @ 2024-05-27 7/week @ 2024-06-03 14/week @ 2024-06-10 5/week @ 2024-06-17 35/week @ 2024-06-24

每月下载 62
3 个 包中使用

MIT 许可

16KB
245 代码行

funcfmt | 测试

funcfmt 是一个简单、轻量级的模板引擎库,允许使用自定义运行时上下文和函数特性进行模板化。它最初是为 exifrename 创建的,以便高效地处理数千个 EXIF 对象的格式和一组回调。

文档

文档可在 docs.rs 上找到,或通过 cargo doc --open 查看文档。

用法

要将 funcfmt 添加到依赖项

cargo add funcfmt

funcfmt 的基本流程如下所示

  1. 给定一个名为 FormatMap<T>formatters,调用 formatters.to_format_pieces(),它会将所有内容预处理成一个 FormatPieces<T>,其中 &T 是回调函数将接受的唯一参数。这允许在处理事物时避免重新解析格式化程序和遍历模板。
  2. 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