7 个版本 (4 个破坏性更新)

0.5.0 2023 年 4 月 17 日
0.4.0 2023 年 3 月 1 日
0.3.0 2023 年 3 月 1 日
0.2.0 2023 年 2 月 28 日
0.1.2 2023 年 2 月 27 日

模板引擎 中排名第 82

Download history 43723/week @ 2024-03-14 48211/week @ 2024-03-21 56944/week @ 2024-03-28 56510/week @ 2024-04-04 66060/week @ 2024-04-11 64187/week @ 2024-04-18 60888/week @ 2024-04-25 66395/week @ 2024-05-02 65607/week @ 2024-05-09 68650/week @ 2024-05-16 75851/week @ 2024-05-23 87926/week @ 2024-05-30 83991/week @ 2024-06-06 78902/week @ 2024-06-13 71540/week @ 2024-06-20 80211/week @ 2024-06-27

每月下载量 336,238
207 个 Crates 中使用 (通过 attribute-derive-macro)

MIT/Apache 协议

255KB
3.5K SLoC

interpolator

CI Status Documentation for main Crates.io Docs.rs

运行时 format! 的实现。

format

format! 的运行时版本。

接受一个字符串和一个上下文,其中包含 Formattable 值,返回一个字符串。

use std::collections::HashMap;
use template::{format, Formattable};

let formatted = format(
    "{value:+05}", // could be dynamic
    &[("value", Formattable::display(&12))].into_iter().collect::<HashMap<_,_>>(),
)
.unwrap();

assert_eq!(formatted, format!("{:+05}", 12));

write

write! 的运行时版本。

接受一个可变 Write,例如 &mut String,一个格式字符串和一个上下文,其中包含 Formattable 值。

use std::collections::HashMap;
use template::{write, Formattable};
                                                                            
let mut buf = String::new();
write(
    &mut buf,
    "{value:+05}", // could be dynamic
    &[("value", Formattable::display(&12))].into_iter().collect::<HashMap<_,_>>(),
)
.unwrap();
                                                                            
assert_eq!(buf, format!("{:+05}", 12));

i 迭代格式

功能 iter 启用额外的格式 trait i,它允许使用格式字符串和可选的连接表达式格式化值列表。

语法是 {list:i(格式字符串, '{}' 是数组元素)(连接)},空连接也可以省略 {list:i({})}。如果省略连接,格式字符串 {} 也可以省略 {list:i}

如果您需要在格式字符串或连接操作中使用 ),您可以在其中添加类似于 Rust 的 原始字符串#(例如,#(({}))#)。

您还可以在格式字符串之前指定一个子切片的范围进行迭代,例如 {list:i1..4}。对于开放范围,范围界限也可以省略。要从末尾开始索引,可以使用负的范围界限。

您还可以通过只指定一个 isize 来索引单个值 {list:i1}

使用 Formattable::iter 创建实现 iter 的 Formattable

// HashMap macro
use collection_literals::hash;
use interpolator::{format, Formattable};
// Needs to be a slice of references because `Formattable::display` expects a
// reference
let items = [&"hello", &"hi", &"hey"].map(Formattable::display);
let items = Formattable::iter(&items);
let format_str = "Greetings: {items:i..-1(`{it}`)(, )} and {items:i-1..(`{it}`)}";
assert_eq!(
    format(format_str, &hash!("items" => items))?,
    "Greetings: `hello`, `hi` and `hey`"
);
# return Ok::<(), interpolator::Error>(())

特性

默认情况下,仅支持 Display,其余的 格式化特性 可以通过以下特性启用。

  • debug 启用 ?x?X? 特性指定符
  • number 启用 xXboeE 特性指定符
  • pointer 启用 p 特性指定符
  • iter 启用 i 特性指定符

无运行时依赖