1use crate::{vec, ConversionError, Env, IntoVal, Topics, TryFromVal, Val, Vec};
4
5impl TryFromVal<Env, ()> for Vec<Val> {
6 type Error = ConversionError;
7
8 fn try_from_val(env: &Env, _v: &()) -> Result<Self, Self::Error> {
9 Ok(Vec::<Val>::new(env))
10 }
11}
12
13macro_rules! impl_into_vec_for_tuple {
14 ( $($typ:ident $idx:tt)* ) => {
15 impl<$($typ),*> TryFromVal<Env, ($($typ,)*)> for Vec<Val>
16 where
17 $($typ: IntoVal<Env, Val>),*
18 {
19 type Error = ConversionError;
20 fn try_from_val(env: &Env, v: &($($typ,)*)) -> Result<Self, Self::Error> {
21 Ok(vec![&env, $(v.$idx.into_val(env), )*])
22 }
23 }
24 };
25}
26impl_into_vec_for_tuple! { T0 0 }
27impl_into_vec_for_tuple! { T0 0 T1 1 }
28impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 }
29impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 }
30impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 }
31impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 }
32impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 }
33impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 }
34impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 }
35impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 }
36impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 T10 10 }
37impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 T10 10 T11 11 }
38impl_into_vec_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 T10 10 T11 11 T12 12 }
39
40macro_rules! impl_topics_for_tuple {
41 ( $($typ:ident $idx:tt)* ) => {
42 impl<$($typ),*> Topics for ($($typ,)*)
43 where
44 $($typ: IntoVal<Env, Val>),*
45 {
46 }
47 };
48}
49
50impl Topics for () {}
52impl_topics_for_tuple! { T0 0 }
54impl_topics_for_tuple! { T0 0 T1 1 }
55impl_topics_for_tuple! { T0 0 T1 1 T2 2 }
56impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 }
57impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 }
58impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 }
59impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 }
60impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 }
61impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 }
62impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 }
63impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 T10 10 }
64impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 T10 10 T11 11 }
65impl_topics_for_tuple! { T0 0 T1 1 T2 2 T3 3 T4 4 T5 5 T6 6 T7 7 T8 8 T9 9 T10 10 T11 11 T12 12 }