#enums #repr #derive

from-repr-enum-derive

具有repr的枚举的Derive From

3个版本

使用旧的Rust 2015

0.1.2 2018年3月18日
0.1.1 2018年3月17日
0.1.0 2018年3月16日

#repr中排名第29

MIT许可证

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