int-enum 0.5.0

A derive macro for conversion between integer and enum types.
Documentation
#![allow(clippy::enum_clike_unportable_variant, clippy::unreadable_literal)]
#![cfg(not(feature = "serde"))]
#![cfg_attr(int_enum_test_repr128, feature(repr128))]

macro_rules! bounds_tests {
    ($( ($ty:tt $min:literal $max:literal) )*) => {$(
        pub mod $ty {
            use int_enum::IntEnum;

            #[repr($ty)]
            #[derive(Clone, Copy, Debug, Eq, PartialEq, IntEnum)]
            pub enum Bounds {
                Min = $min,
                Max = $max,
            }

            #[test]
            fn test_as_int() {
                assert_eq!($ty::MIN, Bounds::Min.int_value());
                assert_eq!($ty::MAX, Bounds::Max.int_value());
            }

            #[test]
            fn test_from_int() {
                assert_eq!(Bounds::Min, Bounds::from_int($ty::MIN).unwrap());
                assert_eq!(Bounds::Max, Bounds::from_int($ty::MAX).unwrap());
            }
        }
    )*};
}

bounds_tests! {
    (u8 0 255)
    (u16 0 65535)
    (u32 0 4294967295)
    (u64 0 18446744073709551615)
}

bounds_tests! {
    (i8 -128 127)
    (i16 -32768 32767)
    (i32 -2147483648 2147483647)
    (i64 -9223372036854775808 9223372036854775807)
}

#[cfg(int_enum_test_repr128)]
bounds_tests! {
    (u128 0 340282366920938463463374607431768211455)
    (i128 -170141183460469231731687303715884105728 170141183460469231731687303715884105727)
}

#[cfg(target_pointer_width = "16")]
bounds_tests! {
    (usize 0 65535)
    (isize -32768 32767)
}

#[cfg(target_pointer_width = "32")]
bounds_tests! {
    (usize 0 4294967295)
    (isize -2147483648 2147483647)
}

#[cfg(target_pointer_width = "64")]
bounds_tests! {
    (usize 0 18446744073709551615)
    (isize -9223372036854775808 9223372036854775807)
}