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 值格式化
33,682 每月下载量
用于 102 个 crate (60 直接)
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
特性,它为 str
和 String
类型添加了 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 更新中,strfmt
和 Format::format
的签名已更改,以修复数字格式化的错误。为了便于迁移,strfmt_display
和 Format::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
方法来展示如何实现,但我真的需要所有能得到的帮助来完成这个库。