checked-enum 0.1.0

Provides a trait `CheckedEnum` and a type `UncheckedEnum` which are useful when wrapping FFI libraries that use enums which you cannot guarantee will be in range, but you would like to allow a program to keep running when such an enum value is encourtered.
Documentation
#[macro_use]
extern crate checked_enum;

use checked_enum::UncheckedEnum;

#[derive(Copy, Clone, Debug, PartialEq)]
pub enum Foo {
    A = 0,
    B = 1,
}

checked_enum!(Foo(u32) => { from_u32, to_u32 });

impl Foo {
    pub fn from_u32(val: u32) -> Option<Foo> {
        match val {
            0 => Some(Foo::A),
            1 => Some(Foo::B),
            _ => None,
        }
    }

    pub fn to_u32(self) -> u32 {
        self as u32
    }
}

#[test]
fn basics() {
    assert_eq!(UncheckedEnum::from(Foo::A), UncheckedEnum::new(0));
    assert_eq!(UncheckedEnum::from(Foo::B), UncheckedEnum::new(1));
    assert_eq!(UncheckedEnum::new(0), Foo::A);
    assert_eq!(UncheckedEnum::new(1), Foo::B);
    assert_eq!(UncheckedEnum::new(0), Some(Foo::A));
    assert_eq!(UncheckedEnum::new(1), Some(Foo::B));
    assert_eq!(UncheckedEnum::new(2), None::<Foo>);
}