#iterator #enums #derive #double-ended #no-alloc #proc-macro

无需 std iter-enum

#[derive(Iterator, DoubleEndedIterator, ExactSizeIterator, Extend)] for 枚举

12 个版本 (7 个稳定)

1.1.3 2024 年 1 月 27 日
1.1.1 2023 年 6 月 29 日
1.1.0 2023 年 3 月 26 日
1.0.2 2022 年 12 月 10 日
0.2.3 2019 年 11 月 22 日

2637Rust 模式

Download history 4181/week @ 2024-03-14 3348/week @ 2024-03-21 1432/week @ 2024-03-28 1432/week @ 2024-04-04 1169/week @ 2024-04-11 1214/week @ 2024-04-18 1602/week @ 2024-04-25 1300/week @ 2024-05-02 2296/week @ 2024-05-09 1565/week @ 2024-05-16 1092/week @ 2024-05-23 1690/week @ 2024-05-30 924/week @ 2024-06-06 881/week @ 2024-06-13 835/week @ 2024-06-20 732/week @ 2024-06-27

每月 3,501 次下载
用于 32 个crate (5 个直接使用)

Apache-2.0 OR MIT

22KB
172

iter-enum

crates.io docs.rs license rust version github actions

#[derive(Iterator, DoubleEndedIterator, ExactSizeIterator, FusedIterator, Extend)] for 枚举。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
iter-enum = "1"

编译器支持:需要 rustc 1.56+

示例

use iter_enum::*;

#[derive(Iterator, DoubleEndedIterator, ExactSizeIterator, FusedIterator, Extend)]
enum Either<A, B> {
    A(A),
    B(B),
}

fn foo(x: i32) -> impl Iterator<Item = i32> {
    if x > 0 {
        Either::A(x..=0)
    } else {
        Either::B(Some(x).into_iter())
    }
}

请参阅 auto_enums crate 了解如何自动化此类模式。

支持的特质

可选功能

  • rayon
    • 启用以使用 #[derive(ParallelIterator, IndexedParallelIterator, ParallelExtend)].
  • auto_enums: 一个允许通过自动生成的枚举实现多个返回类型的库。
  • derive_utils: 用于轻松编写枚举的 derive 宏的进程宏助手。
  • io-enum: 为枚举提供 #[derive(Read, Write, Seek, BufRead)]。

许可证

在您的选择下,根据 Apache License, Version 2.0 或 MIT 许可证进行许可。

除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,将双重许可如上所述,无需任何额外的条款或条件。

依赖项

~320–780KB
~18K SLoC