1#![no_std]
2#![allow(unused_imports)]
3
4#[cfg(feature = "tuple_meta")]
5mod meta {
6 pub trait Tuple {
8 fn arity(&self) -> usize;
10 }
11
12 impl Tuple for () {
13 fn arity(&self) -> usize {
14 0
15 }
16 }
17
18 impl<T> Tuple for (T,) {
19 fn arity(&self) -> usize {
20 1
21 }
22 }
23
24 pub trait TupleV2: Tuple {
26 const ARITY: usize;
28
29 type Item<const N: usize>
30 where
31 Self: crate::TupleItemN<N>;
32 }
33
34 impl TupleV2 for () {
35 const ARITY: usize = 0;
36
37 type Item<const N: usize>
38 = <Self as crate::TupleItemN<N>>::ItemN
39 where
40 Self: crate::TupleItemN<N>;
41 }
42
43 impl<T> TupleV2 for (T,) {
44 const ARITY: usize = 1;
45
46 type Item<const N: usize>
47 = <Self as crate::TupleItemN<N>>::ItemN
48 where
49 Self: crate::TupleItemN<N>;
50 }
51
52 pub trait TupleSame<T>: Tuple {}
54
55 impl<T> TupleSame<T> for () {}
56 impl<T> TupleSame<T> for (T,) {}
57
58 pub trait TupleSameV2<T>: TupleV2 + TupleSame<T> {}
60
61 impl<T> TupleSameV2<T> for () {}
62 impl<T> TupleSameV2<T> for (T,) {}
63
64 include!("./gen/tuple_impl.rs");
65
66 #[cfg(test)]
67 mod tests {
68 use crate::*;
69
70 #[test]
71 fn test0() {
72 let a = (1, 2.0, '3', "4", true);
73 assert_eq!(a.arity(), 5);
74 }
75
76 #[test]
77 fn test1() {
78 assert_eq!(<(i32, f64, char) as TupleV2>::ARITY, 3);
79 assert_eq!(<(i32, f64, char)>::ARITY, 3);
80 }
81
82 #[test]
83 fn test2() {
84 let _: <(i32, f64, char) as TupleV2>::Item<1> = 3.14f64;
85 }
86 }
87}
88#[cfg(feature = "tuple_meta")]
89pub use meta::*;
90
91#[cfg(feature = "tuple_meta")]
93pub mod tuple_n {
94 use crate::meta::*;
95
96 pub trait Tuple0: Tuple {}
97 impl Tuple0 for () {}
98
99 pub trait Tuple1: Tuple {
100 type Item0;
101 }
102
103 impl<T> Tuple1 for (T,) {
104 type Item0 = T;
105 }
106
107 include!("./gen/tuple_n.rs");
108}
109#[cfg(all(feature = "tuple_meta", feature = "re-exports"))]
110pub use tuple_n::*;
111
112#[cfg(feature = "tuple_meta")]
114pub mod tuple_item_n {
115 use crate::meta::*;
116
117 pub trait TupleItemN<const N: usize>: TupleV2 {
118 type ItemN;
119 }
120
121 include!("./gen/tuple_item_n.rs");
122}
123#[cfg(all(feature = "tuple_meta", feature = "re-exports"))]
124pub use tuple_item_n::*;
125
126#[cfg(feature = "shorthand")]
127mod shorthand {
128 include!("./gen/tuple_alias.rs");
129
130 #[macro_export]
177 macro_rules! tuple {
178 { $($t:tt)* } => { tuple_! { $($t)* } }
179 }
180}
181#[cfg(feature = "shorthand")]
182pub use shorthand::*;
183
184#[cfg(feature = "tuple_as")]
185pub mod tuple_as;
186#[cfg(all(feature = "tuple_as", feature = "re-exports"))]
187pub use tuple_as::*;
188
189#[cfg(feature = "tuple_iter")]
190pub mod tuple_iter;
191#[cfg(all(feature = "tuple_iter", feature = "re-exports"))]
192pub use tuple_iter::*;
193
194#[cfg(feature = "tuple_map")]
195pub mod tuple_map;
196#[cfg(all(feature = "tuple_map", feature = "re-exports"))]
197pub use tuple_map::*;
198
199#[cfg(feature = "combin")]
200pub mod combin;
201#[cfg(all(feature = "combin", feature = "re-exports"))]
202pub use combin::*;
203
204#[cfg(any(feature = "split_by", feature = "split_to_tuple_by", feature = "split_at", feature = "split_to_tuple_at"))]
206pub mod split {
207 #[cfg(feature = "split_parts")]
208 pub mod split_parts;
209 #[cfg(all(feature = "split_parts", feature = "re-exports"))]
210 pub use split_parts::*;
211
212 #[cfg(feature = "split_by")]
213 pub mod split_by;
214 #[cfg(all(feature = "split_by", feature = "re-exports"))]
215 pub use split_by::*;
216
217 #[cfg(feature = "split_to_tuple_by")]
218 pub mod split_to_tuple_by;
219 #[cfg(all(feature = "split_to_tuple_by", feature = "re-exports"))]
220 pub use split_to_tuple_by::*;
221
222 #[cfg(feature = "split_at")]
223 pub mod split_at;
224 #[cfg(all(feature = "split_at", feature = "re-exports"))]
225 pub use split_at::*;
226
227 #[cfg(feature = "split_to_tuple_at")]
228 pub mod split_to_tuple_at;
229 #[cfg(all(feature = "split_to_tuple_at", feature = "re-exports"))]
230 pub use split_to_tuple_at::*;
231}
232#[cfg(all(any(feature = "split_by", feature = "split_to_tuple_by", feature = "split_at", feature = "split_to_tuple_at"), feature = "re-exports"))]
233pub use split::*;
234
235#[cfg(feature = "transpose")]
236pub mod transpose;
237#[cfg(all(feature = "transpose", feature = "re-exports"))]
238pub use transpose::*;
239
240#[cfg(feature = "flatten")]
241pub mod flatten;
242#[cfg(all(feature = "flatten", feature = "re-exports"))]
243pub use flatten::*;
244
245#[cfg(feature = "cloned")]
246pub mod cloned;
247#[cfg(all(feature = "cloned", feature = "re-exports"))]
248pub use cloned::*;
249
250#[cfg(feature = "tuple_call")]
251pub mod tuple_call;
252#[cfg(all(feature = "tuple_call", feature = "re-exports"))]
253pub use tuple_call::*;
254
255#[cfg(feature = "apply_tuple")]
256pub mod apply_tuple;
257#[cfg(all(feature = "apply_tuple", feature = "re-exports"))]
258pub use apply_tuple::*;
259
260#[cfg(feature = "capt")]
261pub mod capt;
262#[cfg(all(feature = "capt", feature = "re-exports"))]
263pub use capt::*;
264
265#[cfg(feature = "tuple_get")]
266pub mod tuple_get;
267#[cfg(all(feature = "tuple_get", feature = "re-exports"))]
268pub use tuple_get::*;
269
270#[cfg(all(feature = "sort", feature = "tuple_meta", feature = "tuple_get"))]
271pub mod sort;
272#[cfg(all(feature = "sort", feature = "tuple_meta", feature = "tuple_get", feature = "re-exports"))]
273pub use sort::*;
274
275#[cfg(any(feature = "tuple_swap_n", test, doc))]
276pub mod tuple_swap_n;
277#[cfg(any(all(feature = "tuple_swap_n", feature = "re-exports"), test, doc))]
278pub use tuple_swap_n::*;
279
280#[cfg(any(feature = "permutations", test, doc))]
281pub mod permutations;
282#[cfg(any(all(feature = "permutations", feature = "re-exports"), test, doc))]
283pub use permutations::*;
284
285#[cfg(any(feature = "combinations", test, doc))]
286pub mod combinations;
287#[cfg(any(all(feature = "combinations", feature = "re-exports"), test, doc))]
288pub use combinations::*;
289
290#[cfg(any(feature = "afn", test, doc))]
291pub mod afn;
292
293#[cfg(any(feature = "uniform_map", test, doc))]
294pub mod uniform_map;
295#[cfg(any(all(feature = "uniform_map", feature = "re-exports"), test, doc))]
296pub use uniform_map::*;
297
298#[cfg(any(feature = "uniform_map_by", test, doc))]
299pub mod uniform_map_by;
300#[cfg(any(all(feature = "uniform_map_by", feature = "re-exports"), test, doc))]
301pub use uniform_map_by::*;
302
303#[cfg(any(feature = "uniform_map_by", test, doc))]
304mod param;
305
306#[cfg(any(feature = "get2", test, doc))]
307pub mod get2;
308