12 个版本

使用旧的 Rust 2015

0.2.4 2023年2月15日
0.2.3 2023年2月1日
0.2.2 2022年8月10日
0.2.1 2022年7月29日
0.1.3 2016年5月27日

#13 in 值格式化

Download history 8354/week @ 2024-03-14 7604/week @ 2024-03-21 6872/week @ 2024-03-28 6348/week @ 2024-04-04 6841/week @ 2024-04-11 7207/week @ 2024-04-18 7521/week @ 2024-04-25 7376/week @ 2024-05-02 7698/week @ 2024-05-09 8453/week @ 2024-05-16 7291/week @ 2024-05-23 10460/week @ 2024-05-30 7476/week @ 2024-06-06 8889/week @ 2024-06-13 8591/week @ 2024-06-20 7069/week @ 2024-06-27

33,682 每月下载量
用于 102 个 crate (60 直接)

MIT 许可

58KB
1.5K SLoC

strfmt: 动态字符串格式化 Rust 库

此库适用于希望将类似 Rust 的格式化引入非静态字符串的 Rust 开发者。

格式化 Display 类型的基本用法

extern crate strfmt;
use strfmt::strfmt;
use std::collections::HashMap;

#[test]
fn it_works() {
    let mut vars = HashMap::new();
    vars.insert("name".to_string(), "bob");
    vars.insert("job".to_string(), "python developer");

    let fmt = "hi, my name is {name} and I am a {job}!".to_string();
    assert_eq!(
      strfmt(&fmt, &vars).unwrap(),
      "hi, my name is bob and I am a python developer!")
}

除了 strfmt 函数外,此库还有 Format 特性,它为 strString 类型添加了 format 方法。

assert_eq!("hi, my name is {name}".format(&vars), "hi, my name is bob")

您可以在需要格式化动态字符串时使用此库,例如,如果您正在为用户提供用户界面或读取配置文件。

strfmt 不支持空标识符(即 {}{:<10})。整数标识符将被读取为 hashmap 的 str 键(即 {1:<10} 的键将是 "1")

遗留问题

在 0.2.0 更新中,strfmtFormat::format 的签名已更改,以修复数字格式化的错误。为了便于迁移,strfmt_displayFormat::format_display 函数提供了旧行为。

BETA:格式化数字类型

此功能处于测试阶段,可能发生变化。我预计它目前相当稳定,但欢迎对开发提出反馈。

此外,对于数字类型,“带符号的零填充”(即 +000042)尚不支持

使用 strfmt_map 还可以格式化整数和浮点数

let mut vars: HashMap<String, f64> = HashMap::new();
vars.insert("x".to_string(), 42.4242);
vars.insert("y".to_string(), -100.11111);
vars.insert("z".to_string(), 0.);

let f = |mut fmt: Formatter| {
    fmt.f64(*vars.get(fmt.key).unwrap())
};
assert_eq!(strfmt_map("{x:<7.2}", f).unwrap(), "42.42  ");
assert_eq!(strfmt_map("{y:+.2E}", f).unwrap(), "-1.00E2");
assert_eq!(strfmt_map("{z:+.2E}", f).unwrap(), "+0.00E0");

状态和目标

strfmt旨在支持std::fmt中定义的所有格式化选项。目前它仅官方支持字符串的格式化选项(对i64和f64提供beta支持)

请参阅语法以了解如何创建格式化字符串

当前状态(按优先级排序)

  • 将strfmt_map的beta版本移除并创建Format.format_map方法
  • 处理数值类型的符号感知零填充
  • 格式化任何Display类型
  • 稳定strfmt_map并将format_map添加到Format特质中。
  • f64方法添加到Formatter,允许使用strfmt_map的用户根据规范格式化f64
  • i64方法添加到Formatter,允许使用strfmt_map的用户根据规范格式化i64
  • 使用DisplayStr特质进行格式化,允许正确格式化整数类型。
  • 寻找具有“无界浮点数”(类似于Python)的Rust库并将其添加到格式化器中
  • 寻找具有“无界整数”(类似于Python)的Rust库并将其添加到格式化器中
  • 实现vec方法到Formatter,允许使用strfmt_map的用户以使用精度和宽度(精度将限制显示的元素数量,宽度为每个元素的宽度)的方式格式化Vec<Display>类型
  • 为提高速度,特别支持格式化HashMap<String, String>
  • 为提高速度,特别支持格式化HashMap<String, &str>
  • 为提高速度,特别支持格式化HashMap<&str, &str>

帮助

I (@vitiral)不再是这个库或任何Rust代码的活跃维护者,但我接受修复错误或实现上述功能的拉取请求。所有拉取请求都必须进行适当的测试。

添加功能应该是相当简单的,主要的工作是检查和处理标志,并创建全面的测试。我希望我很快将创建f64方法来展示如何实现,但我真的需要所有能得到的帮助来完成这个库。

无运行时依赖