/enum-repr

Derive enum repr conversions compatible with type aliases

Primary LanguageRustApache License 2.0Apache-2.0

enum-repr

Generate enum repr conversions compatible with type aliases. Works on no_std.

EnumRepr proc macro takes an type argument and defines two functions for the enum used on:

fn repr(&self) -> EnumReprType
fn from_repr(x: EnumReprType) -> Option<Self>

The real enum discriminant still remains isize.

extern crate enum_repr;
extern crate libc;

use libc::*;

use enum_repr::EnumRepr;

#[EnumRepr(type = "c_int")]
#[derive(Debug, PartialEq)]
pub enum IpProto {
    IP = IPPROTO_IP,
    IPv6 = IPPROTO_IPV6,
    // …
}

fn main() {
    assert_eq!(IpProto::IP.repr(), IPPROTO_IP);
    assert_eq!(IpProto::from_repr(IPPROTO_IPV6), Some(IpProto::IPv6));
    assert!(IpProto::from_repr(12345).is_none());
}

License

This project is licensed under either of

at your option.