5 个版本 (3 个稳定版)
1.2.0 | 2024 年 5 月 9 日 |
---|---|
1.1.0 | 2024 年 5 月 5 日 |
1.0.0 | 2023 年 12 月 19 日 |
0.1.1 | 2023 年 12 月 14 日 |
0.1.0 | 2023 年 12 月 14 日 |
#3 in #three
每月 33 次下载
用于 evolution
65KB
1.5K SLoC
🔎 概述
以最小的内存开销高效地填充和格式化几乎任何泛型切片或向量。这个包在性能上优于标准库的 format!
宏。克隆此仓库并运行 cargo bench
以查看此实现与标准库之间的基准比较。
库定义了一个核心特性 Source
,它可以在类型上实现高效的填充。它目前实现了三种主要的数据结构类型:字符串切片 &str
、泛型切片 &[T]
和泛型向量 Vec<T>
。注意类型 T
必须遵守特性约束 T: From<Symbol>
,其中 Symbol
是表示可用字符/符号的枚举。如果您想用您自己的类型 T
扩展 Source
特性的填充功能,那么您还需要为您的类型 T
实现特性 From<Symbol>
。请参阅实现示例,链接。
📦 安装
将 padder 包含到您自己的包中最简单的方法是使用 Cargo 包管理器。
$ cargo add padder
或者,您可以通过克隆此仓库并使用 Cargo 编译来从源代码构建,然后将库链接到您的项目。
$ git clone https://github.com/firelink-data/padder.git
$ cd padder
$ cargo build --release
🚀 示例
将 padder 添加到您的包依赖项将使 Source
特性在作用域内,并允许填充。
例如,您可以非常容易地以以下方式填充字符串切片
let padded: String = "cool".pad(10, Alignment::Center, Symbol::Zero);
这将生成填充后的字符串 000cool000
。您还可以填充到一个已经分配的缓冲区中,从而完全控制任何堆分配,如下所示
let width: usize = 8;
let mut output: Vec<u8> = Vec::with_capacity(width);
let original = vec![13u8, 9, 128, 81];
original.pad_and_push_to_buffer(width, Alignment::Right, Symbol::Whitespace, output);
还提供了两个简单的包装方法,分别称为 pad
和 pad_and_push_to_buffer
,只要实现了 Source
trait,就可以在任意类型上进行填充。例如,您可以使用这些函数如下所示
// pad
let original: &str = "hej";
let width: usize = 9;
let output: String = pad(original, width, Alignment::Left, Symbol::Hyphen);
// pad_and_push_to_buffer
let buffer = String::with_capacity(11);
pad_and_push_to_buffer("testcool", 11, Alignment::Right, Symbol::Whitespace);
这将生成字符串 hej------
和 testcool
。
📋 许可证
所有代码均在通用MIT许可证下,请参阅 LICENSE 获取具体信息。
依赖项
~225–570KB
~11K SLoC