4 个版本
新增 0.1.3 | 2024 年 8 月 3 日 |
---|---|
0.1.2 | 2024 年 8 月 2 日 |
0.1.1 | 2024 年 8 月 2 日 |
0.1.0 | 2024 年 8 月 2 日 |
#1043 在 Rust 模式
每月 75 次下载
25KB
382 行
tuplemagic
TupleMagic 是一个 Rust 库,它提供通过映射、过滤、嵌套和归约等操作来操作元组的实用工具。此库支持元组的值级和类型级操作。
详情
TupleMagic 将元组转换为嵌套形式,这允许对元组类型进行类似 varargs 的处理。一个类型为 (A, B, C)
的输入元组变成嵌套形式 (A, (B, (C, EOT)))
。
将元组转换为嵌套类型简化了过滤和映射操作,因为它利用了递归类型结构,这些结构本质上是更适应递归特质的。
注意,此库的一些功能仅以宏的形式提供,因为操作的非宏形式可能不便于使用(例如:filter
和 map
操作)。
特性
- 嵌套和解嵌套:将元组转换为嵌套结构,反之亦然。
# use tuplemagic::*;
let a = (1, 2, 3).nest();
- 映射:根据类型映射器对元组的每个元素应用转换。
# use tuplemagic::*;
type T = (Option<u8>, Option<u16>, Option<()>);
struct RemoveOption {}
impl<T> TypeMap<RemoveOption> for Option<T> {
type Mapped = T;
}
type U = tuple_mapper!(RemoveOption::map(T));
- 过滤:根据谓词包含或排除元组中的元素。
# use tuplemagic::*;
type T = (u8, u16, Option<()>);
tuple_filter_predicate!(P = { include = (u8, Vec<u8>), exclude = (u16, u32, ~ <T> Option<T>)});
type U = tuple_filter!(P::filter_type(T));
- 归约:使用归约器将元组归约为一个单一值。
# use tuplemagic::*;
struct TupleReducerSum;
impl<T> TupleReducer<usize, T> for TupleReducerSum where T: TryInto<usize>,
{
fn reduce_one(collect: usize, from: T) -> usize {
collect + from.try_into().unwrap_or_default()
}
}
let out = TupleReducerSum::reduce((1_u8, 2_u16, 3_u32), 0);
操作
此包的特性可能作为宏、特质或两者都有,这取决于易用性考虑。该包的目标是最终迁移到纯特质系统,但在此时期这似乎是不可能的。
宏的底层机制可能会更改,并且目前不被视为稳定。
操作 | 值级别 | 类型级别 | API |
---|---|---|---|
嵌套 | 是 | 是 | TupleNest ,TupleUnnest nest! |
解包 | 是 | 是 | 见上文 |
映射 | 是 | tuple_mapper! TypeMap |
|
过滤 | 是 | 是 | tuple_filter! tuple_filter_predicate! |
归约 | 是 | TupleReducer ,TupleReducerCapable |
安装
将此添加到您的 Cargo.toml
[dependencies]
tuplemagic = "0.x.y"
依赖
~46KB