1use crate::Portable;
4
5macro_rules! impl_tuple {
6 ($name:ident $n:tt, $($t:ident $u:ident $index:tt),* $(,)?) => {
7 #[doc = concat!("An archived tuple with ", stringify!($n), " elements")]
8 #[derive(
9 Debug,
10 Default,
11 Eq,
12 Hash,
13 Ord,
14 PartialEq,
15 PartialOrd,
16 Portable,
17 )]
18 #[cfg_attr(feature = "bytecheck", derive(bytecheck::CheckBytes))]
19 #[rkyv(crate)]
20 #[repr(C)]
21 pub struct $name<$($t),*>($(pub $t),*);
22
23 impl<$($t,)* $($u),*> PartialEq<($($u,)*)> for $name<$($t),*>
24 where
25 $($t: PartialEq<$u>,)*
26 {
27 fn eq(&self, other: &($($u,)*)) -> bool {
28 $(self.$index == other.$index)&&*
29 }
30 }
31 };
32}
33
34impl_tuple!(ArchivedTuple1 1, T0 U0 0);
35impl_tuple!(ArchivedTuple2 2, T0 U0 0, T1 U1 1);
36impl_tuple!(ArchivedTuple3 3, T0 U0 0, T1 U1 1, T2 U2 2);
37impl_tuple!(ArchivedTuple4 4, T0 U0 0, T1 U1 1, T2 U2 2, T3 U3 3);
38impl_tuple!(ArchivedTuple5 5, T0 U0 0, T1 U1 1, T2 U2 2, T3 U3 3, T4 U4 4);
39impl_tuple!(
40 ArchivedTuple6 6, T0 U0 0, T1 U1 1, T2 U2 2, T3 U3 3, T4 U4 4, T5 U5 5
41);
42impl_tuple!(
43 ArchivedTuple7 7,
44 T0 U0 0,
45 T1 U1 1,
46 T2 U2 2,
47 T3 U3 3,
48 T4 U4 4,
49 T5 U5 5,
50 T6 U6 6,
51);
52impl_tuple!(
53 ArchivedTuple8 8,
54 T0 U0 0,
55 T1 U1 1,
56 T2 U2 2,
57 T3 U3 3,
58 T4 U4 4,
59 T5 U5 5,
60 T6 U6 6,
61 T7 U7 7,
62);
63impl_tuple!(
64 ArchivedTuple9 9,
65 T0 U0 0,
66 T1 U1 1,
67 T2 U2 2,
68 T3 U3 3,
69 T4 U4 4,
70 T5 U5 5,
71 T6 U6 6,
72 T7 U7 7,
73 T8 U8 8,
74);
75impl_tuple!(
76 ArchivedTuple10 10,
77 T0 U0 0,
78 T1 U1 1,
79 T2 U2 2,
80 T3 U3 3,
81 T4 U4 4,
82 T5 U5 5,
83 T6 U6 6,
84 T7 U7 7,
85 T8 U8 8,
86 T9 U9 9
87);
88impl_tuple!(
89 ArchivedTuple11 11,
90 T0 U0 0,
91 T1 U1 1,
92 T2 U2 2,
93 T3 U3 3,
94 T4 U4 4,
95 T5 U5 5,
96 T6 U6 6,
97 T7 U7 7,
98 T8 U8 8,
99 T9 U9 9,
100 T10 U10 10,
101);
102impl_tuple!(
103 ArchivedTuple12 12,
104 T0 U0 0,
105 T1 U1 1,
106 T2 U2 2,
107 T3 U3 3,
108 T4 U4 4,
109 T5 U5 5,
110 T6 U6 6,
111 T7 U7 7,
112 T8 U8 8,
113 T9 U9 9,
114 T10 U10 10,
115 T11 U11 11,
116);
117impl_tuple!(
118 ArchivedTuple13 13,
119 T0 U0 0,
120 T1 U1 1,
121 T2 U2 2,
122 T3 U3 3,
123 T4 U4 4,
124 T5 U5 5,
125 T6 U6 6,
126 T7 U7 7,
127 T8 U8 8,
128 T9 U9 9,
129 T10 U10 10,
130 T11 U11 11,
131 T12 U12 12,
132);
133
134#[cfg(test)]
135mod tests {
136 use crate::tuple::ArchivedTuple3;
137
138 #[test]
139 fn partial_eq() {
140 assert_eq!(ArchivedTuple3(1, 2, 3), (1, 2, 3));
141 }
142}