6 个版本
0.2.2 | 2023 年 11 月 30 日 |
---|---|
0.2.1 | 2023 年 11 月 30 日 |
0.1.2 | 2023 年 11 月 28 日 |
#496 在 算法 分类中
每月 38 次下载
26KB
486 行
Fmttools
通过单个 write!
调用高效修改文本的工具。
- 不执行任何分配
- 仅使用安全的 Rust 实现
示例
连接迭代器元素
use fmttools::join;
let elements = vec!["abc", "\n", "123"];
assert_eq!("abc, \n, 123", format!("{}", join(&elements, ", ")));
assert_eq!("\"abc\", \"\\n\", \"123\"", format!("{:?}", join(&elements, ", ")));
使用自定义格式连接元素
use fmttools::join_fmt;
// Alternatively, a closure can be used
fn format_element(x: &i32, f: &mut Formatter<'_>) -> fmt::Result {
if *x > 3 {
return write!(f, "3+");
}
write!(f, "{}", x)
}
let elements = vec![1, 2, 3, 4, 5];
assert_eq!("1, 2, 3, 3+, 3+", format!("{}", join_fmt(&elements, ", ", format_element)));
替换任意模式
use fmttools::replace;
#[derive(Debug)]
struct FooBar {
a: String,
}
let value = FooBar { a: "Bar".to_string() };
assert_eq!("FooBiz { a: \"Biz\" }", format!("{:?}", replace(&value, "Bar", "Biz")));
使用额外数据格式化
use fmttools::{DebugWith, ToFormatWith};
type RegistryKey = u32;
struct Registry {
key_names: HashMap<RegistryKey, String>,
}
struct FooEntry {
key: RegistryKey,
}
impl DebugWith<Registry> for FooEntry {
fn fmt(&self, f: &mut Formatter<'_>, registry: &Registry) -> fmt::Result {
let key_name = registry.key_names.get(&self.key)
.map(|x| x.as_str())
.unwrap_or("unknown");
write!(f, "FooEntry {{ key: {:?} }}", key_name)
}
}
let registry = Registry {
key_names: HashMap::from([
(2, "FooA".to_string()),
(5, "FooB".to_string()),
(9, "Bar".to_string()),
]),
};
let entry = FooEntry { key: 5 };
assert_eq!("FooEntry { key: \"FooB\" }", format!("{:?}", entry.fmt_with(®istry)));
许可证
在 Apache 许可证版本 2.0 或 MIT 许可证下发布,您可以选择其中一种。此文件不得复制、修改或分发,除非符合这些条款。