2 个版本

0.1.1 2021 年 8 月 24 日
0.1.0 2021 年 8 月 24 日

#2193Rust 模式

Download history 22/week @ 2024-03-11 28/week @ 2024-03-18 40/week @ 2024-03-25 78/week @ 2024-04-01 18/week @ 2024-04-08 24/week @ 2024-04-15 27/week @ 2024-04-22 19/week @ 2024-04-29 22/week @ 2024-05-06 24/week @ 2024-05-13 15/week @ 2024-05-20 22/week @ 2024-05-27 13/week @ 2024-06-03 23/week @ 2024-06-10 15/week @ 2024-06-17 21/week @ 2024-06-24

每月 72 次下载
用于 8 个crate (4 个直接)

ISC 或 MIT 或 Apache-2.0

44KB
484

用于操作元组的实用库。

功能

  • 测试所有元素是否为 Okall_ok()

    assert_eq!(
        all_ok((good(1), good(2), good(3))),
        Ok((1, 2, 3)),
    );
    assert_eq!(
        all_ok((good(1), bad(2), good(3))),
        Err((Ok(1), Err(2), Ok(3)))
    );
    
  • 测试所有元素是否为 Someall_some()

    assert_eq!(
        all_some((Some(1), Some(2), Some(3))),
        Ok((1, 2, 3))
    );
    assert_eq!(
        all_some((Some(1), Option::<()>::None, Some(3))),
        Err((Some(1), None, Some(3)))
    );
    
  • 将元素添加到元组开头: prepend()

    assert_eq!(
        prepend(1, (2, 3, 4)),
        (1, 2, 3, 4)
    );
    
  • 将元素添加到元组末尾: append()

    assert_eq!(
        append((1, 2, 3), 4),
        (1, 2, 3, 4)
    );
    
  • 连接两个元组: concat_tuples()

    assert_eq!(
        concat_tuples((1, 2), (3, 4, 5)),
        (1, 2, 3, 4, 5)
    );
    
  • 连接多个元组: concat_many()

    assert_eq!(
        concat_many(((), (1,), (2, 3,), (4, 5, 6))),
        (1, 2, 3, 4, 5, 6)
    );
    
  • 将元组的引用转换为引用元组: ref_tuple()

    assert_eq!(
        ref_tuple(&(1, 2, 3)),
        (&1, &2, &3)
    );
    
  • 将可变元组的引用转换为可变引用元组: tuple_ref_mut()

    assert_eq!(
        tuple_ref_mut(&mut (1, 2, 3)),
        (&mut 1, &mut 2, &mut 3)
    );
    
  • 提取元组的第一个元素: unprepend()

    assert_eq!(
        unprepend((1, 2, 3, 4)),
        (1, (2, 3, 4))
    );
    
  • 提取元组的最后一个元素: unappend()

    assert_eq!(
        unappend((1, 2, 3, 4)),
        ((1, 2, 3), 4)
    );
    
  • 以元组成员作为参数调用函数: apply()

    fn add3(a: u32, b: u32, c: u32) -> u32 { a + b + c }
    
    let tpl3 = (1, 2, 3);
    assert_eq!(
        apply(&add3, tpl3),
        6
    );
    
  • 将元组的元素逐个包装在 Option 中: option_tuple()

    assert_eq!(
        option_tuple(Some((1, 2, 3))),
        (Some(1), Some(2), Some(3))
    );
    
  • 获取元组的长度: length()

    assert_eq!(<(u8, u16, u32) as TupleLength>::LENGTH, 3);
    
  • 映射元组: map_tuple()

    struct MyTupleEnum(usize);
    
    impl TupleMapper for MyTupleEnum {
        type MapElem<Type> = (usize, Type);
    
        fn map_elem<Elem>(&mut self, elem: Elem) -> Self::MapElem<Elem> {
            let index = self.0;
            self.0 += 1;
            (index, elem)
        }
    }
    
    assert_eq!(
        map_tuple(MyTupleEnum(1), ("hello", "world", "!")),
        ((1, "hello"), (2, "world"), (3, "!")),
    )
    

支持的元组长度

默认情况下,选定的操作适用于长度为16个元素的元组(features = ["default-len"])。

您可以通过使用feature = ["X"]来指定更高的限制,其中X可以是8、16、32、64、96、128、160、192、224或256。较大的数字包含所有较小的数字。

依赖关系

~1.5MB
~36K SLoC