1pub trait IntoNonZeroArray<T, const N: usize> {
2 fn into_non_zero_array(self) -> [T; N];
3}
4
5impl IntoNonZeroArray<String, 1> for String {
8 fn into_non_zero_array(self) -> [String; 1] {
9 [self]
10 }
11}
12
13impl IntoNonZeroArray<String, 1> for &str {
14 fn into_non_zero_array(self) -> [String; 1] {
15 [self.to_owned()]
16 }
17}
18
19impl<T, const N: usize> IntoNonZeroArray<T, N> for [T; N] {
22 fn into_non_zero_array(self) -> [T; N] {
23 if N == 0 {
24 panic!("Should not be creating 0-sized arrays");
25 }
26
27 self
28 }
29}
30
31impl<T, U> IntoNonZeroArray<T, 1> for (U,)
34where
35 U: Into<T>,
36{
37 fn into_non_zero_array(self) -> [T; 1] {
38 [self.0.into()]
39 }
40}
41
42impl<T, U1, U2> IntoNonZeroArray<T, 2> for (U1, U2)
43where
44 U1: Into<T>,
45 U2: Into<T>,
46{
47 fn into_non_zero_array(self) -> [T; 2] {
48 [self.0.into(), self.1.into()]
49 }
50}
51
52impl<T, U1, U2, U3> IntoNonZeroArray<T, 3> for (U1, U2, U3)
53where
54 U1: Into<T>,
55 U2: Into<T>,
56 U3: Into<T>,
57{
58 fn into_non_zero_array(self) -> [T; 3] {
59 [self.0.into(), self.1.into(), self.2.into()]
60 }
61}
62
63impl<T, U1, U2, U3, U4> IntoNonZeroArray<T, 4> for (U1, U2, U3, U4)
64where
65 U1: Into<T>,
66 U2: Into<T>,
67 U3: Into<T>,
68 U4: Into<T>,
69{
70 fn into_non_zero_array(self) -> [T; 4] {
71 [self.0.into(), self.1.into(), self.2.into(), self.3.into()]
72 }
73}
74
75impl<T, U1, U2, U3, U4, U5> IntoNonZeroArray<T, 5> for (U1, U2, U3, U4, U5)
76where
77 U1: Into<T>,
78 U2: Into<T>,
79 U3: Into<T>,
80 U4: Into<T>,
81 U5: Into<T>,
82{
83 fn into_non_zero_array(self) -> [T; 5] {
84 [
85 self.0.into(),
86 self.1.into(),
87 self.2.into(),
88 self.3.into(),
89 self.4.into(),
90 ]
91 }
92}
93
94impl<T, U1, U2, U3, U4, U5, U6> IntoNonZeroArray<T, 6> for (U1, U2, U3, U4, U5, U6)
95where
96 U1: Into<T>,
97 U2: Into<T>,
98 U3: Into<T>,
99 U4: Into<T>,
100 U5: Into<T>,
101 U6: Into<T>,
102{
103 fn into_non_zero_array(self) -> [T; 6] {
104 [
105 self.0.into(),
106 self.1.into(),
107 self.2.into(),
108 self.3.into(),
109 self.4.into(),
110 self.5.into(),
111 ]
112 }
113}
114
115impl<T, U1, U2, U3, U4, U5, U6, U7> IntoNonZeroArray<T, 7> for (U1, U2, U3, U4, U5, U6, U7)
116where
117 U1: Into<T>,
118 U2: Into<T>,
119 U3: Into<T>,
120 U4: Into<T>,
121 U5: Into<T>,
122 U6: Into<T>,
123 U7: Into<T>,
124{
125 fn into_non_zero_array(self) -> [T; 7] {
126 [
127 self.0.into(),
128 self.1.into(),
129 self.2.into(),
130 self.3.into(),
131 self.4.into(),
132 self.5.into(),
133 self.6.into(),
134 ]
135 }
136}
137
138impl<T, U1, U2, U3, U4, U5, U6, U7, U8> IntoNonZeroArray<T, 8> for (U1, U2, U3, U4, U5, U6, U7, U8)
139where
140 U1: Into<T>,
141 U2: Into<T>,
142 U3: Into<T>,
143 U4: Into<T>,
144 U5: Into<T>,
145 U6: Into<T>,
146 U7: Into<T>,
147 U8: Into<T>,
148{
149 fn into_non_zero_array(self) -> [T; 8] {
150 [
151 self.0.into(),
152 self.1.into(),
153 self.2.into(),
154 self.3.into(),
155 self.4.into(),
156 self.5.into(),
157 self.6.into(),
158 self.7.into(),
159 ]
160 }
161}
162
163impl<T, U1, U2, U3, U4, U5, U6, U7, U8, U9> IntoNonZeroArray<T, 9>
164 for (U1, U2, U3, U4, U5, U6, U7, U8, U9)
165where
166 U1: Into<T>,
167 U2: Into<T>,
168 U3: Into<T>,
169 U4: Into<T>,
170 U5: Into<T>,
171 U6: Into<T>,
172 U7: Into<T>,
173 U8: Into<T>,
174 U9: Into<T>,
175{
176 fn into_non_zero_array(self) -> [T; 9] {
177 [
178 self.0.into(),
179 self.1.into(),
180 self.2.into(),
181 self.3.into(),
182 self.4.into(),
183 self.5.into(),
184 self.6.into(),
185 self.7.into(),
186 self.8.into(),
187 ]
188 }
189}
190
191impl<T, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10> IntoNonZeroArray<T, 10>
192 for (U1, U2, U3, U4, U5, U6, U7, U8, U9, U10)
193where
194 U1: Into<T>,
195 U2: Into<T>,
196 U3: Into<T>,
197 U4: Into<T>,
198 U5: Into<T>,
199 U6: Into<T>,
200 U7: Into<T>,
201 U8: Into<T>,
202 U9: Into<T>,
203 U10: Into<T>,
204{
205 fn into_non_zero_array(self) -> [T; 10] {
206 [
207 self.0.into(),
208 self.1.into(),
209 self.2.into(),
210 self.3.into(),
211 self.4.into(),
212 self.5.into(),
213 self.6.into(),
214 self.7.into(),
215 self.8.into(),
216 self.9.into(),
217 ]
218 }
219}
220
221impl<T, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11> IntoNonZeroArray<T, 11>
222 for (U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11)
223where
224 U1: Into<T>,
225 U2: Into<T>,
226 U3: Into<T>,
227 U4: Into<T>,
228 U5: Into<T>,
229 U6: Into<T>,
230 U7: Into<T>,
231 U8: Into<T>,
232 U9: Into<T>,
233 U10: Into<T>,
234 U11: Into<T>,
235{
236 fn into_non_zero_array(self) -> [T; 11] {
237 [
238 self.0.into(),
239 self.1.into(),
240 self.2.into(),
241 self.3.into(),
242 self.4.into(),
243 self.5.into(),
244 self.6.into(),
245 self.7.into(),
246 self.8.into(),
247 self.9.into(),
248 self.10.into(),
249 ]
250 }
251}
252
253impl<T, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12> IntoNonZeroArray<T, 12>
254 for (U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12)
255where
256 U1: Into<T>,
257 U2: Into<T>,
258 U3: Into<T>,
259 U4: Into<T>,
260 U5: Into<T>,
261 U6: Into<T>,
262 U7: Into<T>,
263 U8: Into<T>,
264 U9: Into<T>,
265 U10: Into<T>,
266 U11: Into<T>,
267 U12: Into<T>,
268{
269 fn into_non_zero_array(self) -> [T; 12] {
270 [
271 self.0.into(),
272 self.1.into(),
273 self.2.into(),
274 self.3.into(),
275 self.4.into(),
276 self.5.into(),
277 self.6.into(),
278 self.7.into(),
279 self.8.into(),
280 self.9.into(),
281 self.10.into(),
282 self.11.into(),
283 ]
284 }
285}