3个版本
使用旧的Rust 2015
0.1.2 | 2018年3月18日 |
---|---|
0.1.1 | 2018年3月17日 |
0.1.0 | 2018年3月16日 |
在#repr中排名第29
5KB
69 行
from-repr-enum-derive
一个用于具有repr定义的枚举的派生的crate
目前需要一个#[repr()]
来使派生工作
示例
#[macro_use]
extern crate from_repr_enum_derive;
#[repr(u8)]
#[derive(FromReprEnum,Debug,PartialEq)]
enum Foo {
X = 1,
Y = 2,
Unknown = 255,
}
fn main() {
let z = Foo::from(1);
assert_eq!(Foo::X, z);
}
创建的match块需要一个默认的枚举变体。这个crate有一个默认的Unknown
自定义默认变体
你可以使用另一个属性定义自己的#[ReprEnumDefault = ""]
#[repr(u8)]
#[derive(FromReprEnum, Debug, PartialEq)]
#[ReprEnumDefault = "NotFound"]
enum Bar {
X = 1,
Y = 2,
NotFound = 255,
}
fn main() {
let x = Bar::from(1);
assert_eq!(Bar::X, x);
let u = Bar::from(99);
assert_eq!(Bar::NotFound, u);
}
注意
生成的match块尝试使用带通配符的枚举名称。如果编译器找不到变体,你可能需要添加use path::to::Enum::*
依赖项
~2MB
~47K SLoC