#tuple #nested #mapping #operations #filtering #reducing #manipulating

tuplemagic

通过映射、过滤、嵌套和归约等操作对元组进行操作的实用工具

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 日

#1043Rust 模式

Download history

每月 75 次下载

Apache-2.0 OR MIT

25KB
382

tuplemagic

TupleMagic 是一个 Rust 库,它提供通过映射、过滤、嵌套和归约等操作来操作元组的实用工具。此库支持元组的值级和类型级操作。

详情

TupleMagic 将元组转换为嵌套形式,这允许对元组类型进行类似 varargs 的处理。一个类型为 (A, B, C) 的输入元组变成嵌套形式 (A, (B, (C, EOT)))

将元组转换为嵌套类型简化了过滤和映射操作,因为它利用了递归类型结构,这些结构本质上是更适应递归特质的。

注意,此库的一些功能仅以宏的形式提供,因为操作的非宏形式可能不便于使用(例如:filtermap 操作)。

特性

  • 嵌套和解嵌套:将元组转换为嵌套结构,反之亦然。
# 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
嵌套 TupleNestTupleUnnest nest!
解包 见上文
映射 tuple_mapper! TypeMap
过滤 tuple_filter! tuple_filter_predicate!
归约 TupleReducerTupleReducerCapable

安装

将此添加到您的 Cargo.toml

[dependencies]
tuplemagic = "0.x.y"

依赖

~46KB