1 #![allow(dead_code)]
2 #[macro_use]
3 extern crate derive_more;
4 
5 #[derive(From)]
6 struct EmptyTuple();
7 
8 #[derive(From)]
9 struct EmptyStruct {}
10 
11 #[derive(From)]
12 struct EmptyUnit;
13 
14 #[derive(From)]
15 struct MyInt(i32);
16 
17 #[derive(From)]
18 struct MyInts(i32, i32);
19 
20 #[derive(From)]
21 struct Point1D {
22     x: i32,
23 }
24 
25 #[derive(From)]
26 struct Point2D {
27     x: i32,
28     y: i32,
29 }
30 
31 #[derive(From)]
32 enum MixedInts {
33     SmallInt(i32),
34     NamedBigInt {
35         int: i64,
36     },
37     TwoSmallInts(i32, i32),
38     NamedBigInts {
39         x: i64,
40         y: i64,
41     },
42     #[from(ignore)]
43     Unsigned(u32),
44     NamedUnsigned {
45         x: u32,
46     },
47 }
48 
49 #[derive(PartialEq, Eq, Debug)]
50 #[derive(From)]
51 #[from(forward)]
52 struct MyIntForward(u64);
53 
54 #[test]
forward_struct()55 fn forward_struct() {
56     assert_eq!(MyIntForward(42), 42u32.into());
57     assert_eq!(MyIntForward(42), 42u16.into());
58     assert_eq!(MyIntForward(42), 42u64.into());
59 }
60 
61 #[derive(PartialEq, Eq, Debug)]
62 #[derive(From)]
63 enum MixedIntsForward {
64     #[from(forward)]
65     SmallInt(i32),
66     NamedBigInt {
67         int: i64,
68     },
69 }
70 
71 #[test]
forward_enum()72 fn forward_enum() {
73     assert_eq!(MixedIntsForward::SmallInt(42), 42i32.into());
74     assert_eq!(MixedIntsForward::SmallInt(42), 42i16.into());
75 }
76 
77 #[derive(From, PartialEq)]
78 enum AutoIgnore {
79     SmallInt(i32),
80     Uninteresting,
81     Uninteresting2,
82 }
83 
84 #[test]
auto_ignore_variants()85 fn auto_ignore_variants() {
86     assert!(AutoIgnore::SmallInt(42) == 42i32.into());
87 }
88 
89 #[derive(From, PartialEq)]
90 enum AutoIgnoreWithDefaultTrue {
91     #[from(ignore)]
92     SmallInt(i32),
93     Uninteresting,
94     Uninteresting2,
95 }
96 
97 #[derive(From, PartialEq)]
98 enum AutoIgnoreWithForwardFields2 {
99     #[from(forward)]
100     SmallInt(i32),
101     SmallIntIgnore(i32),
102 }
103 
104 #[test]
auto_ignore_with_forward_field2()105 fn auto_ignore_with_forward_field2() {
106     assert!(AutoIgnoreWithForwardFields2::SmallInt(42) == 42i32.into());
107     assert!(AutoIgnoreWithForwardFields2::SmallInt(42) == 42i16.into());
108 }
109