soroban_sdk/
tuple.rs

1//! This module contains conversion helpers for tuple
2
3use 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
50// 0 topics
51impl Topics for () {}
52// 1-13 topics
53impl_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 }