1 use ::std::convert::TryFrom;
2
3 use ::num_enum::{FromPrimitive, TryFromPrimitive};
4
5 // Guard against https://github.com/illicitonion/num_enum/issues/27
6 mod alloc {}
7 mod core {}
8 mod num_enum {}
9 mod std {}
10
11 #[test]
has_from_primitive_number()12 fn has_from_primitive_number() {
13 #[derive(Debug, Eq, PartialEq, FromPrimitive)]
14 #[repr(u8)]
15 enum Enum {
16 Zero = 0,
17 #[num_enum(default)]
18 NonZero = 1,
19 }
20
21 let zero = Enum::from_primitive(0_u8);
22 assert_eq!(zero, Enum::Zero);
23
24 let one = Enum::from_primitive(1_u8);
25 assert_eq!(one, Enum::NonZero);
26
27 let two = Enum::from_primitive(2_u8);
28 assert_eq!(two, Enum::NonZero);
29 }
30
31 #[test]
has_from_primitive_number_standard_default_attribute()32 fn has_from_primitive_number_standard_default_attribute() {
33 #[derive(Debug, Eq, PartialEq, FromPrimitive)]
34 #[repr(u8)]
35 enum Enum {
36 Zero = 0,
37 #[default]
38 NonZero = 1,
39 }
40
41 let zero = Enum::from_primitive(0_u8);
42 assert_eq!(zero, Enum::Zero);
43
44 let one = Enum::from_primitive(1_u8);
45 assert_eq!(one, Enum::NonZero);
46
47 let two = Enum::from_primitive(2_u8);
48 assert_eq!(two, Enum::NonZero);
49 }
50
51 #[test]
from_primitive_number()52 fn from_primitive_number() {
53 #[derive(Debug, Eq, PartialEq, FromPrimitive)]
54 #[repr(u8)]
55 enum Enum {
56 #[num_enum(default)]
57 Whatever = 0,
58 }
59
60 // #[derive(FromPrimitive)] generates implementations for the following traits:
61 //
62 // - `FromPrimitive<T>`
63 // - `From<T>`
64 // - `TryFromPrimitive<T>`
65 // - `TryFrom<T>`
66 let from_primitive = Enum::from_primitive(0_u8);
67 assert_eq!(from_primitive, Enum::Whatever);
68
69 let from = Enum::from(0_u8);
70 assert_eq!(from, Enum::Whatever);
71
72 let try_from_primitive = Enum::try_from_primitive(0_u8);
73 assert_eq!(try_from_primitive, Ok(Enum::Whatever));
74
75 let try_from = Enum::try_from(0_u8);
76 assert_eq!(try_from, Ok(Enum::Whatever));
77 }
78