5 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2016 年 11 月 11 日 |
---|---|
0.2.0 | 2016 年 11 月 9 日 |
0.1.2 | 2015 年 11 月 27 日 |
0.1.1 | 2015 年 11 月 27 日 |
0.1.0 | 2015 年 8 月 21 日 |
#1137 in Rust 模式
用于 pf_sandbox
4KB
enum_traits
一个带有特性和辅助过程宏的库,用于扩展枚举的功能。
为 Rust 编程语言中的枚举项提供特性和 "推导" 功能
推导
- EnumIndex (实现 Index)
- EnumFromIndex (实现 FromIndex)
- EnumToIndex (实现 ToIndex)
- EnumLen (实现 Len)
- EnumEnds (实现 Ends)
- EnumDiscriminant (实现 Discriminant)
- EnumIter (实现 Iterable)
- EnumIterator (实现 Iterator)
- EnumVariantName (实现 VariantName)
- EnumBitPattern (实现 BitPattern)
- EnumUnitVariant (实现 UnitVariant)
- EnumIsVariantFns
- EnumFromVariantName (实现 FromStr)
特性
- Index
- FromIndex
- ToIndex
- Len
- Ends
- Discriminant
- Iterable
- VariantName
- BitPattern
- UnitVariant
用法
Cargo.toml
[dependencies]
enum_traits = "*"
enum_traits_macros = "*"
无 std
[dependencies]
enum_traits = {version="*",features=["no_std"]}
enum_traits_macros = {version="*",features=["no_std"]}
示例
//#![feature(associated_consts)]
#[macro_use]extern crate enum_traits_macros;
extern crate enum_traits;
use enum_traits::*;
fn f1(){
#[derive(Debug,EnumIndex,EnumToIndex,EnumLen)]
enum Enum<'t,T: 't>{
VariantA(&'t T),
VariantB(T),
VariantC(T,T,T),
VariantD{d: i32},
VariantE{a: i8,b: i16,c: i32},
VariantF,
}
assert_eq!(Enum::VariantB("OK").into_index(),1);
assert_eq!(Enum::<'static,&'static str>::LEN,6);
}
fn f2(){
#[derive(Debug,EnumIndex,EnumFromIndex,EnumToIndex,EnumLen,EnumIter,EnumIterator,EnumDiscriminant,EnumEnds)]
enum Enum{
VariantA = 10,
VariantB = 20,
VariantC = 30,
}
//From EnumToIndex
assert_eq!(Enum::VariantB.into_index(),1);
//From EnumLen
//assert_eq!(Enum::LEN,3);
assert_eq!(Enum::len(),3);
//From EnumFromIndex
assert!(match Enum::from_index(1){
Some(Enum::VariantB) => true,
_ => false
});
//From EnumDiscriminant
assert!(match Enum::from_discriminant(20){
Some(Enum::VariantB) => true,
_ => false
});
//From EnumEnds
assert!(match Enum::first(){
Enum::VariantA => true,
_ => false
});
//From EnumEnds
assert!(match <Enum as Ends>::last(){
Enum::VariantC => true,
_ => false
});
//From EnumIter
assert!(match Enum::variants().next(){
Some(Enum::VariantA) => true,
_ => false
});
//From EnumIterator
assert!(match Enum::VariantA.next(){
Some(Enum::VariantB) => true,
_ => false
});
}
查看测试以获取更多示例。有关库的文档,请参阅 库文档,有关推导的文档,请参阅 推导文档,有关测试或源代码,请参阅更多信息。
lib.rs
:
用于内置枚举项的简单特性。主要用于 enum_traits_macros
在自动推导类型时。需要 enum_traits_macros
包才能使用推导。