1use crate::{Capacity, CapacityUpperBound, Clear, Length, SizeHint, Truncate};
2
3macro_rules! tuple_impls {
4 ($(
5 $tuple_len:tt {
6 $(($idx:tt) -> $T:ident)*
7 }
8 )+) => {
9 $(
10 impl<$( $T, )*> Capacity for ($( $T, )*) {
11 #[inline]
12 fn capacity(&self) -> usize {
13 $tuple_len
14 }
15 }
16
17 impl<$( $T, )*> CapacityUpperBound for ($( $T, )*) {
18 const CAPACITY_UPPER_BOUND: usize = $tuple_len;
19 }
20
21 #[allow(non_snake_case)]
22 impl<$( $T: Clear, )*> Clear for ($( $T, )*) {
23 #[inline]
24 fn clear(&mut self) {
25 $( self.$idx.clear(); )*
26 }
27 }
28
29 impl<$( $T, )*> Length for ($( $T, )*) {
30 #[inline]
31 fn length(&self) -> usize {
32 $tuple_len
33 }
34 }
35
36 impl<$( $T, )*> SizeHint for ($( $T, )*) {
37 #[inline]
38 fn size_hint(&self) -> (usize, Option<usize>) {
39 ($tuple_len, Some($tuple_len))
40 }
41 }
42
43 #[allow(non_snake_case)]
44 impl<$( $T: Truncate, )*> Truncate for ($( $T, )*) {
45 type Input = ($( $T::Input, )*);
46
47 #[inline]
48 fn truncate(&mut self, input: Self::Input) {
49 $( self.$idx.truncate(input.$idx); )*
50 }
51 }
52 )+
53 }
54}
55
56tuple_impls! {
57 1 {
58 (0) -> A
59 }
60 2 {
61 (0) -> A
62 (1) -> B
63 }
64 3 {
65 (0) -> A
66 (1) -> B
67 (2) -> C
68 }
69 4 {
70 (0) -> A
71 (1) -> B
72 (2) -> C
73 (3) -> D
74 }
75 5 {
76 (0) -> A
77 (1) -> B
78 (2) -> C
79 (3) -> D
80 (4) -> E
81 }
82 6 {
83 (0) -> A
84 (1) -> B
85 (2) -> C
86 (3) -> D
87 (4) -> E
88 (5) -> F
89 }
90 7 {
91 (0) -> A
92 (1) -> B
93 (2) -> C
94 (3) -> D
95 (4) -> E
96 (5) -> F
97 (6) -> G
98 }
99 8 {
100 (0) -> A
101 (1) -> B
102 (2) -> C
103 (3) -> D
104 (4) -> E
105 (5) -> F
106 (6) -> G
107 (7) -> H
108 }
109 9 {
110 (0) -> A
111 (1) -> B
112 (2) -> C
113 (3) -> D
114 (4) -> E
115 (5) -> F
116 (6) -> G
117 (7) -> H
118 (8) -> I
119 }
120 10 {
121 (0) -> A
122 (1) -> B
123 (2) -> C
124 (3) -> D
125 (4) -> E
126 (5) -> F
127 (6) -> G
128 (7) -> H
129 (8) -> I
130 (9) -> J
131 }
132 11 {
133 (0) -> A
134 (1) -> B
135 (2) -> C
136 (3) -> D
137 (4) -> E
138 (5) -> F
139 (6) -> G
140 (7) -> H
141 (8) -> I
142 (9) -> J
143 (10) -> K
144 }
145 12 {
146 (0) -> A
147 (1) -> B
148 (2) -> C
149 (3) -> D
150 (4) -> E
151 (5) -> F
152 (6) -> G
153 (7) -> H
154 (8) -> I
155 (9) -> J
156 (10) -> K
157 (11) -> L
158 }
159}