9 个版本 (5 个稳定版)
使用旧的 Rust 2015
2.0.0 | 2017年1月17日 |
---|---|
1.2.1 | 2016年11月11日 |
0.1.3 | 2015年12月29日 |
0.1.2 | 2015年11月27日 |
0.1.0 | 2015年8月22日 |
在 过程宏 中排名第2208
每月下载量55次
被用于 pf_sandbox
18KB
518 行
enum_traits
一个包含特质和相应过程宏的库,用于为枚举添加功能。
为 Rust 编程语言中的枚举项提供特质和 "deriving"。
继承
- 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
});
}
依赖项
~0.4–0.8MB
~19K SLoC