15 个版本
0.5.0 | 2022年7月9日 |
---|---|
0.4.4 | 2021年12月8日 |
0.4.3 | 2021年8月11日 |
0.4.2 | 2020年5月25日 |
0.3.3 | 2018年5月11日 |
1177 在 Rust 模式 中
94 每月下载量
14KB
246 代码行
enum-unitary
单元枚举的特性和宏
EnumUnitary
特性为遍历单元枚举的变体(即枚举变体没有有效负载)的原始转换提供了一系列约束。
enum_unitary!
宏定义了一个实现 EnumUnitary
和所需特性的新枚举。
使用方法
为了使宏生成 Sequence
,还需要将 enum-iterator
包添加到 Cargo.toml
enum-iterator = "1.0"
enum-unitary = "0.5"
定义单元枚举
use enum_unitary::{enum_unitary, EnumUnitary, FromPrimitive, ToPrimitive};
enum_unitary! {
#[derive(Debug, PartialEq)]
pub enum E {
A, B, C
}
}
assert_eq!(enum_iterator::cardinality::<E>(), 3);
assert_eq!(Into::<usize>::into (E::A), 0);
assert_eq!(Into::<usize>::into (E::B), 1);
assert_eq!(Into::<usize>::into (E::C), 2);
assert_eq!(enum_iterator::first::<E>().unwrap(), E::A);
assert_eq!(enum_iterator::last::<E>().unwrap(), E::C);
let mut i = enum_iterator::all::<E>();
assert_eq!(i.next(), Some (E::A));
assert_eq!(i.next(), Some (E::B));
assert_eq!(i.next(), Some (E::C));
assert_eq!(i.next(), None);
assert_eq!(enum_iterator::next (&E::A), Some (E::B));
assert_eq!(enum_iterator::previous (&E::A), None);
assert_eq!(enum_iterator::next (&E::B), Some (E::C));
assert_eq!(enum_iterator::previous (&E::B), Some (E::A));
assert_eq!(enum_iterator::next (&E::C), None);
assert_eq!(enum_iterator::previous (&E::C), Some (E::B));
依赖项
~0.4–1MB
~21K SLoC