1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use super::Cast;

impl<A, B, T1, T2> Cast<(A, B)> for (T1, T2)
where
	T1: Cast<A>,
	T2: Cast<B>,
{
	fn to((a, b): (A, B)) -> Self {
		(T1::to(a), T2::to(b))
	}
}

impl<A, B, C, T1, T2, T3> Cast<(A, B, C)> for (T1, T2, T3)
where
	T1: Cast<A>,
	T2: Cast<B>,
	T3: Cast<C>,
{
	fn to((a, b, c): (A, B, C)) -> Self {
		(T1::to(a), T2::to(b), T3::to(c))
	}
}

impl<A, B, C, D, T1, T2, T3, T4> Cast<(A, B, C, D)> for (T1, T2, T3, T4)
where
	T1: Cast<A>,
	T2: Cast<B>,
	T3: Cast<C>,
	T4: Cast<D>,
{
	fn to((a, b, c, d): (A, B, C, D)) -> Self {
		(T1::to(a), T2::to(b), T3::to(c), T4::to(d))
	}
}

impl<A, T, const N: usize> Cast<[A; N]> for [T; N]
where
	T: Cast<A>,
{
	fn to(a: [A; N]) -> Self {
		a.map(|x| T::to(x))
	}
}