@@ -29,6 +29,9 @@ macro_rules! _encode_tlv {
29
29
BigSize ( $field. serialized_length( ) as u64 ) . write( $stream) ?;
30
30
$field. write( $stream) ?;
31
31
} ;
32
+ ( $stream: expr, $type: expr, $field: expr, required_vec) => {
33
+ $crate:: _encode_tlv!( $stream, $type, $crate:: util:: ser:: WithoutLength ( & $field) , required) ;
34
+ } ;
32
35
( $stream: expr, $type: expr, $field: expr, vec_type) => {
33
36
$crate:: _encode_tlv!( $stream, $type, $crate:: util:: ser:: WithoutLength ( & $field) , required) ;
34
37
} ;
@@ -41,7 +44,7 @@ macro_rules! _encode_tlv {
41
44
} ;
42
45
( $stream: expr, $type: expr, $field: expr, optional_vec) => {
43
46
if !$field. is_empty( ) {
44
- $crate:: _encode_tlv!( $stream, $type, $field, vec_type ) ;
47
+ $crate:: _encode_tlv!( $stream, $type, $field, required_vec ) ;
45
48
}
46
49
} ;
47
50
( $stream: expr, $type: expr, $field: expr, upgradable_required) => {
@@ -159,6 +162,9 @@ macro_rules! _get_varint_length_prefixed_tlv_length {
159
162
BigSize ( field_len as u64 ) . write( & mut $len) . expect( "No in-memory data may fail to serialize" ) ;
160
163
$len. 0 += field_len;
161
164
} ;
165
+ ( $len: expr, $type: expr, $field: expr, required_vec) => {
166
+ $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $crate:: util:: ser:: WithoutLength ( & $field) , required) ;
167
+ } ;
162
168
( $len: expr, $type: expr, $field: expr, vec_type) => {
163
169
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $crate:: util:: ser:: WithoutLength ( & $field) , required) ;
164
170
} ;
@@ -172,7 +178,7 @@ macro_rules! _get_varint_length_prefixed_tlv_length {
172
178
} ;
173
179
( $len: expr, $type: expr, $field: expr, optional_vec) => {
174
180
if !$field. is_empty( ) {
175
- $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, vec_type ) ;
181
+ $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required_vec ) ;
176
182
}
177
183
} ;
178
184
( $len: expr, $type: expr, $field: expr, ( option: $trait: ident $( , $read_arg: expr) ?) ) => {
@@ -236,6 +242,9 @@ macro_rules! _check_decoded_tlv_order {
236
242
( $last_seen_type: expr, $typ: expr, $type: expr, $field: ident, option) => { {
237
243
// no-op
238
244
} } ;
245
+ ( $last_seen_type: expr, $typ: expr, $type: expr, $field: ident, required_vec) => { {
246
+ $crate:: _check_decoded_tlv_order!( $last_seen_type, $typ, $type, $field, required) ;
247
+ } } ;
239
248
( $last_seen_type: expr, $typ: expr, $type: expr, $field: ident, vec_type) => { {
240
249
// no-op
241
250
} } ;
@@ -281,6 +290,9 @@ macro_rules! _check_missing_tlv {
281
290
( $last_seen_type: expr, $type: expr, $field: ident, ( required: $trait: ident $( , $read_arg: expr) ?) ) => { {
282
291
$crate:: _check_missing_tlv!( $last_seen_type, $type, $field, required) ;
283
292
} } ;
293
+ ( $last_seen_type: expr, $type: expr, $field: ident, required_vec) => { {
294
+ $crate:: _check_missing_tlv!( $last_seen_type, $type, $field, required) ;
295
+ } } ;
284
296
( $last_seen_type: expr, $type: expr, $field: ident, vec_type) => { {
285
297
// no-op
286
298
} } ;
@@ -320,6 +332,10 @@ macro_rules! _decode_tlv {
320
332
( $reader: expr, $field: ident, ( required: $trait: ident $( , $read_arg: expr) ?) ) => { {
321
333
$field = $trait:: read( & mut $reader $( , $read_arg) * ) ?;
322
334
} } ;
335
+ ( $reader: expr, $field: ident, required_vec) => { {
336
+ let f: $crate:: util:: ser:: WithoutLength <Vec <_>> = $crate:: util:: ser:: Readable :: read( & mut $reader) ?;
337
+ $field = f. 0 ;
338
+ } } ;
323
339
( $reader: expr, $field: ident, vec_type) => { {
324
340
let f: $crate:: util:: ser:: WithoutLength <Vec <_>> = $crate:: util:: ser:: Readable :: read( & mut $reader) ?;
325
341
$field = Some ( f. 0 ) ;
@@ -694,6 +710,9 @@ macro_rules! _init_tlv_based_struct_field {
694
710
( $field: ident, required) => {
695
711
$field. 0 . unwrap( )
696
712
} ;
713
+ ( $field: ident, required_vec) => {
714
+ $field
715
+ } ;
697
716
( $field: ident, vec_type) => {
698
717
$field. unwrap( )
699
718
} ;
@@ -720,6 +739,9 @@ macro_rules! _init_tlv_field_var {
720
739
( $field: ident, ( required: $trait: ident $( , $read_arg: expr) ?) ) => {
721
740
$crate:: _init_tlv_field_var!( $field, required) ;
722
741
} ;
742
+ ( $field: ident, required_vec) => {
743
+ let mut $field = Vec :: new( ) ;
744
+ } ;
723
745
( $field: ident, vec_type) => {
724
746
let mut $field = Some ( Vec :: new( ) ) ;
725
747
} ;
0 commit comments