multiversx_sc_codec/multi_types/
multi_value_tuple.rs1#![allow(deprecated)]
2
3use crate::{
4 DecodeErrorHandler, EncodeErrorHandler, MultiValueConstLength, MultiValueLength,
5 TopDecodeMulti, TopDecodeMultiInput, TopEncodeMulti, TopEncodeMultiOutput,
6};
7
8macro_rules! multi_value_impls_debug {
9 ($(($mv_struct:ident $len:tt $($n:tt $name:ident)+) )+) => {
10 $(
11 #[derive(Clone, Debug, PartialEq)]
12 pub struct $mv_struct<$($name,)+>(
13 #[deprecated(since = "0.57.0", note = "use .into_tuple() or .as_tuple() instead")]
14 pub ($($name,)+)
15 );
16 )+
17 }
18}
19macro_rules! multi_value_impls_no_debug {
20 ($(($mv_struct:ident $len:tt $($n:tt $name:ident)+) )+) => {
21 $(
22 #[derive(Clone)]
23 pub struct $mv_struct<$($name,)+>(
24 #[deprecated(since = "0.57.0", note = "use .into_tuple() or .as_tuple() instead")]
25 pub ($($name,)+)
26 );
27 )+
28 }
29}
30
31macro_rules! multi_value_impls {
32 ($(($mv_struct:ident $len:tt $($n:tt $name:ident)+) )+) => {
33 $(
34 impl<$($name),+> From<($($name,)+)> for $mv_struct<$($name,)+> {
35 #[inline]
36 fn from(tuple: ($($name,)+)) -> Self {
37 $mv_struct(tuple)
38 }
39 }
40
41 impl<$($name,)+> $mv_struct<$($name,)+> {
42 #[inline]
43 pub fn into_tuple(self) -> ($($name,)+) {
44 self.0
45 }
46
47 #[inline]
48 pub fn as_tuple(&self) -> &($($name,)+) {
49 &self.0
50 }
51 }
52
53 impl<$($name),+ > TopEncodeMulti for $mv_struct<$($name,)+>
54 where
55 $($name: TopEncodeMulti,)+
56 {
57 fn multi_encode_or_handle_err<O, H>(&self, output: &mut O, h: H) -> Result<(), H::HandledErr>
58 where
59 O: TopEncodeMultiOutput,
60 H: EncodeErrorHandler,
61 {
62 $(
63 (self.0).$n.multi_encode_or_handle_err(output, h)?;
64 )+
65 Ok(())
66 }
67 }
68
69 impl<$($name),+ > MultiValueLength for $mv_struct<$($name,)+>
70 where
71 $($name: TopDecodeMulti + MultiValueLength,)+
72 {
73 fn multi_value_len(&self) -> usize {
74 0
75 $(
76 + <$name as MultiValueLength>::multi_value_len(&self.0.$n)
77 )+
78 }
79 }
80
81 impl<$($name),+ > MultiValueConstLength for $mv_struct<$($name,)+>
82 where
83 $($name: TopDecodeMulti + MultiValueConstLength,)+
84 {
85 const MULTI_VALUE_CONST_LEN: usize = 0
86 $(
87 + <$name as MultiValueConstLength>::MULTI_VALUE_CONST_LEN
88 )+
89 ;
90 }
91
92 impl<$($name),+ > TopDecodeMulti for $mv_struct<$($name,)+>
93 where
94 $($name: TopDecodeMulti,)+
95 {
96 fn multi_decode_or_handle_err<I, H>(input: &mut I, h: H) -> Result<Self, H::HandledErr>
97 where
98 I: TopDecodeMultiInput,
99 H: DecodeErrorHandler,
100 {
101 Ok($mv_struct((
102 $(
103 $name::multi_decode_or_handle_err(input, h)?
104 ),+
105 )))
106 }
107 }
108 )+
109 }
110}
111
112multi_value_impls_debug! {
113 (MultiValue2 2 0 T0 1 T1)
114 (MultiValue3 3 0 T0 1 T1 2 T2)
115 (MultiValue4 4 0 T0 1 T1 2 T2 3 T3)
116 (MultiValue5 5 0 T0 1 T1 2 T2 3 T3 4 T4)
117 (MultiValue6 6 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5)
118 (MultiValue7 7 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6)
119 (MultiValue8 8 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7)
120 (MultiValue9 9 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8)
121 (MultiValue10 10 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9)
122 (MultiValue11 11 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10)
123}
124multi_value_impls_no_debug! {
127 (MultiValue12 12 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11)
128 (MultiValue13 13 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12)
129 (MultiValue14 14 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13)
130 (MultiValue15 15 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14)
131 (MultiValue16 16 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14 15 T15)
132}
133
134multi_value_impls! {
135 (MultiValue2 2 0 T0 1 T1)
136 (MultiValue3 3 0 T0 1 T1 2 T2)
137 (MultiValue4 4 0 T0 1 T1 2 T2 3 T3)
138 (MultiValue5 5 0 T0 1 T1 2 T2 3 T3 4 T4)
139 (MultiValue6 6 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5)
140 (MultiValue7 7 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6)
141 (MultiValue8 8 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7)
142 (MultiValue9 9 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8)
143 (MultiValue10 10 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9)
144 (MultiValue11 11 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10)
145 (MultiValue12 12 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11)
146 (MultiValue13 13 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12)
147 (MultiValue14 14 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13)
148 (MultiValue15 15 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14)
149 (MultiValue16 16 0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14 15 T15)
150}