#constant #enum #repr #discriminant

no-std enum-repr

Derive enum repr conversions compatible with type aliases

10 releases

0.2.6 Feb 17, 2020
0.2.5 Oct 1, 2019
0.2.4 Mar 16, 2019
0.2.3 Jan 20, 2019
0.1.1 Jul 21, 2018

#257 in Rust patterns

Download history 37/week @ 2021-08-15 51/week @ 2021-08-22 21/week @ 2021-08-29 28/week @ 2021-09-05 60/week @ 2021-09-12 26/week @ 2021-09-19 29/week @ 2021-09-26 38/week @ 2021-10-03 58/week @ 2021-10-10 44/week @ 2021-10-17 24/week @ 2021-10-24 33/week @ 2021-10-31 52/week @ 2021-11-07 31/week @ 2021-11-14 43/week @ 2021-11-21 79/week @ 2021-11-28

208 downloads per month
Used in 5 crates

MIT/Apache

15KB
179 lines

enum-repr

Build Status Crates.io Documentation

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.

Dependencies

~290–710KB
~18K SLoC

J^