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