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 |
#2137 in Rust patterns
4,718 downloads per month
Used in 21 crates
(10 directly)
15KB
179 lines
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
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Dependencies
~1.5MB
~39K SLoC