1#[macro_export]
3macro_rules! decode_field {
4 ($prototy:ty, $var:expr, $wire_type:expr, $decoder:expr, $decode_fn:path) => {
5 if <$prototy>::WIRE_TYPE == $wire_type {
6 $var = Some($decode_fn($decoder)?);
7 } else {
8 return Err(DecodeError::UnexpectedWireType(
9 <$prototy>::WIRE_TYPE,
10 $wire_type,
11 ));
12 }
13 };
14}
15
16#[macro_export]
17macro_rules! decode_vector {
18 ($prototy:ty, $vec:expr, $wire_type:expr, $decoder:expr, $decode_fn:path) => {
19 if <$prototy>::WIRE_TYPE == $wire_type {
20 $vec.push($decode_fn($decoder)?);
21 } else if WIRE_TYPE_LENGTH_ENCODED == $wire_type {
22 $decoder.decode_packed($vec, $decode_fn)?;
23 } else {
24 return Err(DecodeError::UnexpectedWireType(
25 <$prototy>::WIRE_TYPE,
26 $wire_type,
27 ));
28 }
29 };
30}
31
32#[macro_export]
33macro_rules! decode_vector_nested {
34 ($vec:expr, $wire_type:expr, $decoder:expr, $decode_fn:path) => {
35 if WIRE_TYPE_LENGTH_ENCODED == $wire_type {
36 $vec.push($decode_fn($decoder)?);
37 } else {
38 return Err(DecodeError::UnexpectedWireType(
39 WIRE_TYPE_LENGTH_ENCODED,
40 $wire_type,
41 ));
42 }
43 };
44}
45
46#[macro_export]
47macro_rules! decode_map {
48 ($var:expr, $wire_type:expr, $decoder:expr, $decode_key_fn:path, $decode_value_fn:path) => {
49 if WIRE_TYPE_LENGTH_ENCODED == $wire_type {
50 if let Some((key, value)) =
51 $decoder.decode_map_element($decode_key_fn, $decode_value_fn)?
52 {
53 $var.insert(key, value);
54 }
55 } else {
56 return Err(DecodeError::UnexpectedWireType(
57 WIRE_TYPE_LENGTH_ENCODED,
58 $wire_type,
59 ));
60 }
61 };
62}
63
64#[macro_export]
65macro_rules! decode_nested {
66 ($var:expr, $wire_type:expr, $decoder:expr, $decode_fn:path) => {
67 if WIRE_TYPE_LENGTH_ENCODED == $wire_type {
68 $var = Some($decode_fn($decoder)?);
69 } else {
70 return Err(DecodeError::UnexpectedWireType(
71 WIRE_TYPE_LENGTH_ENCODED,
72 $wire_type,
73 ));
74 }
75 };
76}
77
78#[macro_export]
79macro_rules! encode_field {
80 ($field_number:expr, $prototy:ty, $var:expr, $encoder:expr, $encode_fn:path) => {
81 $encoder.encode_uint32(u32::from_parts($field_number, <$prototy>::WIRE_TYPE));
82 $encode_fn($encoder, $var);
83 };
84}
85
86#[macro_export]
87macro_rules! encode_vector_packed {
88 ($field_number:expr, $var:expr, $encoder:expr, $encode_fn:path) => {
89 $encoder.encode_uint32(u32::from_parts($field_number, WIRE_TYPE_LENGTH_ENCODED));
90 $encoder.encode_packed($var, $encode_fn, $encode_fn);
91 };
92}
93
94#[macro_export]
95macro_rules! encode_vector_unpacked_clone {
96 ($field_number:expr, $prototy:ty, $var:expr, $encoder:expr, $encode_fn:path) => {
97 for item in $var {
98 $encoder.encode_uint32(u32::from_parts($field_number, <$prototy>::WIRE_TYPE));
99 $encode_fn($encoder, item.clone());
100 }
101 };
102}
103
104#[macro_export]
105macro_rules! encode_vector_unpacked {
106 ($field_number:expr, $prototy:ty, $var:expr, $encoder:expr, $encode_fn:path) => {
107 for item in $var {
108 $encoder.encode_uint32(u32::from_parts($field_number, <$prototy>::WIRE_TYPE));
109 $encode_fn($encoder, item);
110 }
111 };
112}
113
114#[macro_export]
115macro_rules! encode_vector_nested {
116 ($field_number:expr, $var:expr, $encoder:expr, $encode_fn:path) => {
117 for item in $var {
118 $encoder.encode_uint32(u32::from_parts($field_number, WIRE_TYPE_LENGTH_ENCODED));
119 $encode_fn($encoder, item);
120 }
121 };
122}
123
124#[macro_export]
125macro_rules! encode_map {
126 (
127 $field_number:expr,
128 $var:expr,
129 $key_access:path,
130 $value_access:path,
131 $key_wire_type:expr,
132 $value_wire_type:expr,
133 $encoder:expr,
134 $key_encode_fn:path,
135 $value_encode_fn:path,
136 ) => {
137 for (key, value) in $var {
138 $encoder.encode_uint32(u32::from_parts($field_number, WIRE_TYPE_LENGTH_ENCODED));
139 $encoder.encode_map_element(
140 $key_access(key),
141 $value_access(value),
142 $key_wire_type,
143 $value_wire_type,
144 $key_encode_fn,
145 $value_encode_fn,
146 $key_encode_fn,
147 $value_encode_fn,
148 )
149 }
150 };
151}
152
153#[macro_export]
154macro_rules! encode_nested {
155 ($field_number:expr, $var:expr, $encoder:expr, $encode_fn:path) => {
156 $encoder.encode_uint32(u32::from_parts($field_number, WIRE_TYPE_LENGTH_ENCODED));
157 $encode_fn($encoder, $var);
158 };
159}