33
33
#[ doc( hidden) ]
34
34
#[ macro_export]
35
35
macro_rules! _encode_tlv {
36
- ( $stream: expr, $type: expr, $field: expr, ( default_value, $default: expr) ) => {
36
+ ( $stream: expr, $type: expr, $field: expr, ( default_value, $default: expr) $ ( , $self : ident ) ? ) => {
37
37
$crate:: _encode_tlv!( $stream, $type, $field, required)
38
38
} ;
39
- ( $stream: expr, $type: expr, $field: expr, ( static_value, $value: expr) ) => {
39
+ ( $stream: expr, $type: expr, $field: expr, ( static_value, $value: expr) $ ( , $self : ident ) ? ) => {
40
40
let _ = & $field; // Ensure we "use" the $field
41
41
} ;
42
- ( $stream: expr, $type: expr, $field: expr, required) => {
42
+ ( $stream: expr, $type: expr, $field: expr, required $ ( , $self : ident ) ? ) => {
43
43
BigSize ( $type) . write( $stream) ?;
44
44
BigSize ( $field. serialized_length( ) as u64 ) . write( $stream) ?;
45
45
$field. write( $stream) ?;
46
46
} ;
47
- ( $stream: expr, $type: expr, $field: expr, required_vec) => {
47
+ ( $stream: expr, $type: expr, $field: expr, required_vec $ ( , $self : ident ) ? ) => {
48
48
$crate:: _encode_tlv!( $stream, $type, $crate:: util:: ser:: WithoutLength ( & $field) , required) ;
49
49
} ;
50
- ( $stream: expr, $optional_type: expr, $optional_field: expr, option) => {
50
+ ( $stream: expr, $optional_type: expr, $optional_field: expr, option $ ( , $self : ident ) ? ) => {
51
51
if let Some ( ref field) = $optional_field {
52
52
BigSize ( $optional_type) . write( $stream) ?;
53
53
BigSize ( field. serialized_length( ) as u64 ) . write( $stream) ?;
54
54
field. write( $stream) ?;
55
55
}
56
56
} ;
57
- ( $stream: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $read: expr, $write: expr) ) => {
58
- $crate:: _encode_tlv!( $stream, $optional_type, $write, option) ;
57
+ ( $stream: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $read: expr, $write: expr) $ ( , $self : ident ) ? ) => {
58
+ $crate:: _encode_tlv!( $stream, $optional_type, $write( $ ( $self ) ? ) , option) ;
59
59
} ;
60
- ( $stream: expr, $type: expr, $field: expr, optional_vec) => {
60
+ ( $stream: expr, $type: expr, $field: expr, optional_vec $ ( , $self : ident ) ? ) => {
61
61
if !$field. is_empty( ) {
62
62
$crate:: _encode_tlv!( $stream, $type, $field, required_vec) ;
63
63
}
64
64
} ;
65
- ( $stream: expr, $type: expr, $field: expr, upgradable_required) => {
65
+ ( $stream: expr, $type: expr, $field: expr, upgradable_required $ ( , $self : ident ) ? ) => {
66
66
$crate:: _encode_tlv!( $stream, $type, $field, required) ;
67
67
} ;
68
- ( $stream: expr, $type: expr, $field: expr, upgradable_option) => {
68
+ ( $stream: expr, $type: expr, $field: expr, upgradable_option $ ( , $self : ident ) ? ) => {
69
69
$crate:: _encode_tlv!( $stream, $type, $field, option) ;
70
70
} ;
71
- ( $stream: expr, $type: expr, $field: expr, ( option, encoding: ( $fieldty: ty, $encoding: ident) ) ) => {
71
+ ( $stream: expr, $type: expr, $field: expr, ( option, encoding: ( $fieldty: ty, $encoding: ident) $ ( , $self : ident ) ? ) ) => {
72
72
$crate:: _encode_tlv!( $stream, $type, $field. map( |f| $encoding( f) ) , option) ;
73
73
} ;
74
- ( $stream: expr, $type: expr, $field: expr, ( option, encoding: $fieldty: ty) ) => {
74
+ ( $stream: expr, $type: expr, $field: expr, ( option, encoding: $fieldty: ty) $ ( , $self : ident ) ? ) => {
75
75
$crate:: _encode_tlv!( $stream, $type, $field, option) ;
76
76
} ;
77
- ( $stream: expr, $type: expr, $field: expr, ( option: $trait: ident $( , $read_arg: expr) ?) ) => {
77
+ ( $stream: expr, $type: expr, $field: expr, ( option: $trait: ident $( , $read_arg: expr) ?) $ ( , $self : ident ) ? ) => {
78
78
// Just a read-mapped type
79
79
$crate:: _encode_tlv!( $stream, $type, $field, option) ;
80
80
} ;
@@ -146,10 +146,10 @@ macro_rules! encode_tlv_stream {
146
146
#[ doc( hidden) ]
147
147
#[ macro_export]
148
148
macro_rules! _encode_tlv_stream {
149
- ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt) ) ,* $( , ) * } ) => { {
150
- $crate:: _encode_tlv_stream!( $stream, { $( ( $type, $field, $fieldty) ) ,* } , & [ ] )
149
+ ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt $ ( , $self : ident ) ? ) ) ,* $( , ) * } ) => { {
150
+ $crate:: _encode_tlv_stream!( $stream, { $( ( $type, $field, $fieldty $ ( , $self ) ? ) ) ,* } , & [ ] )
151
151
} } ;
152
- ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt) ) ,* $( , ) * } , $extra_tlvs: expr) => { {
152
+ ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt $ ( , $self : ident ) ? ) ) ,* $( , ) * } , $extra_tlvs: expr) => { {
153
153
#[ allow( unused_imports) ]
154
154
use $crate:: {
155
155
ln:: msgs:: DecodeError ,
@@ -159,7 +159,7 @@ macro_rules! _encode_tlv_stream {
159
159
} ;
160
160
161
161
$(
162
- $crate:: _encode_tlv!( $stream, $type, $field, $fieldty) ;
162
+ $crate:: _encode_tlv!( $stream, $type, $field, $fieldty $ ( , $self ) ? ) ;
163
163
) *
164
164
for tlv in $extra_tlvs {
165
165
let ( typ, value) : & ( u64 , Vec <u8 >) = tlv;
@@ -188,23 +188,23 @@ macro_rules! _encode_tlv_stream {
188
188
#[ doc( hidden) ]
189
189
#[ macro_export]
190
190
macro_rules! _get_varint_length_prefixed_tlv_length {
191
- ( $len: expr, $type: expr, $field: expr, ( default_value, $default: expr) ) => {
191
+ ( $len: expr, $type: expr, $field: expr, ( default_value, $default: expr) $ ( , $self : ident ) ? ) => {
192
192
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required)
193
193
} ;
194
- ( $len: expr, $type: expr, $field: expr, ( static_value, $value: expr) ) => { } ;
195
- ( $len: expr, $type: expr, $field: expr, required) => {
194
+ ( $len: expr, $type: expr, $field: expr, ( static_value, $value: expr) $ ( , $self : ident ) ? ) => { } ;
195
+ ( $len: expr, $type: expr, $field: expr, required $ ( , $self : ident ) ? ) => {
196
196
BigSize ( $type) . write( & mut $len) . expect( "No in-memory data may fail to serialize" ) ;
197
197
let field_len = $field. serialized_length( ) ;
198
198
BigSize ( field_len as u64 )
199
199
. write( & mut $len)
200
200
. expect( "No in-memory data may fail to serialize" ) ;
201
201
$len. 0 += field_len;
202
202
} ;
203
- ( $len: expr, $type: expr, $field: expr, required_vec) => {
203
+ ( $len: expr, $type: expr, $field: expr, required_vec $ ( , $self : ident ) ? ) => {
204
204
let field = $crate:: util:: ser:: WithoutLength ( & $field) ;
205
205
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, field, required) ;
206
206
} ;
207
- ( $len: expr, $optional_type: expr, $optional_field: expr, option) => {
207
+ ( $len: expr, $optional_type: expr, $optional_field: expr, option $ ( , $self : ident ) ? ) => {
208
208
if let Some ( ref field) = $optional_field {
209
209
BigSize ( $optional_type)
210
210
. write( & mut $len)
@@ -216,25 +216,25 @@ macro_rules! _get_varint_length_prefixed_tlv_length {
216
216
$len. 0 += field_len;
217
217
}
218
218
} ;
219
- ( $len: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $read: expr, $write: expr) ) => {
220
- $crate:: _get_varint_length_prefixed_tlv_length!( $len, $optional_type, $write, option) ;
219
+ ( $len: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $read: expr, $write: expr) $ ( , $self : ident ) ? ) => {
220
+ $crate:: _get_varint_length_prefixed_tlv_length!( $len, $optional_type, $write( $ ( $self ) ? ) , option) ;
221
221
} ;
222
- ( $len: expr, $type: expr, $field: expr, optional_vec) => {
222
+ ( $len: expr, $type: expr, $field: expr, optional_vec $ ( , $self : ident ) ? ) => {
223
223
if !$field. is_empty( ) {
224
224
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required_vec) ;
225
225
}
226
226
} ;
227
- ( $len: expr, $type: expr, $field: expr, ( option: $trait: ident $( , $read_arg: expr) ?) ) => {
227
+ ( $len: expr, $type: expr, $field: expr, ( option: $trait: ident $( , $read_arg: expr) ?) $ ( , $self : ident ) ? ) => {
228
228
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, option) ;
229
229
} ;
230
- ( $len: expr, $type: expr, $field: expr, ( option, encoding: ( $fieldty: ty, $encoding: ident) ) ) => {
230
+ ( $len: expr, $type: expr, $field: expr, ( option, encoding: ( $fieldty: ty, $encoding: ident) ) $ ( , $self : ident ) ? ) => {
231
231
let field = $field. map( |f| $encoding( f) ) ;
232
232
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, field, option) ;
233
233
} ;
234
- ( $len: expr, $type: expr, $field: expr, upgradable_required) => {
234
+ ( $len: expr, $type: expr, $field: expr, upgradable_required $ ( , $self : ident ) ? ) => {
235
235
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required) ;
236
236
} ;
237
- ( $len: expr, $type: expr, $field: expr, upgradable_option) => {
237
+ ( $len: expr, $type: expr, $field: expr, upgradable_option $ ( , $self : ident ) ? ) => {
238
238
$crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, option) ;
239
239
} ;
240
240
}
@@ -244,18 +244,18 @@ macro_rules! _get_varint_length_prefixed_tlv_length {
244
244
#[ doc( hidden) ]
245
245
#[ macro_export]
246
246
macro_rules! _encode_varint_length_prefixed_tlv {
247
- ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt) ) ,* } ) => { {
248
- $crate:: _encode_varint_length_prefixed_tlv!( $stream, { $( ( $type, $field, $fieldty) ) ,* } , & [ ] )
247
+ ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt $ ( , $self : ident ) ? ) ) ,* } ) => { {
248
+ $crate:: _encode_varint_length_prefixed_tlv!( $stream, { $( ( $type, $field, $fieldty $ ( , $self ) ? ) ) ,* } , & [ ] )
249
249
} } ;
250
- ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt) ) ,* } , $extra_tlvs: expr) => { {
250
+ ( $stream: expr, { $( ( $type: expr, $field: expr, $fieldty: tt $ ( , $self : ident ) ? ) ) ,* } , $extra_tlvs: expr) => { {
251
251
extern crate alloc;
252
252
use $crate:: util:: ser:: BigSize ;
253
253
use alloc:: vec:: Vec ;
254
254
let len = {
255
255
#[ allow( unused_mut) ]
256
256
let mut len = $crate:: util:: ser:: LengthCalculatingWriter ( 0 ) ;
257
257
$(
258
- $crate:: _get_varint_length_prefixed_tlv_length!( len, $type, $field, $fieldty) ;
258
+ $crate:: _get_varint_length_prefixed_tlv_length!( len, $type, $field, $fieldty $ ( , $self ) ? ) ;
259
259
) *
260
260
for tlv in $extra_tlvs {
261
261
let ( typ, value) : & ( u64 , Vec <u8 >) = tlv;
@@ -264,7 +264,7 @@ macro_rules! _encode_varint_length_prefixed_tlv {
264
264
len. 0
265
265
} ;
266
266
BigSize ( len as u64 ) . write( $stream) ?;
267
- $crate:: _encode_tlv_stream!( $stream, { $( ( $type, $field, $fieldty) ) ,* } , $extra_tlvs) ;
267
+ $crate:: _encode_tlv_stream!( $stream, { $( ( $type, $field, $fieldty $ ( , $self ) ? ) ) ,* } , $extra_tlvs) ;
268
268
} } ;
269
269
}
270
270
@@ -970,10 +970,10 @@ macro_rules! _decode_and_build {
970
970
/// If `$fieldty` is `option`, then `$field` is optional field.
971
971
/// If `$fieldty` is `optional_vec`, then `$field` is a [`Vec`], which needs to have its individual elements serialized.
972
972
/// Note that for `optional_vec` no bytes are written if the vec is empty
973
- /// If `$fieldty` is `(legacy, $ty, $read, $write)` then, when writing, the expression $write will
974
- /// be called which returns an `Option` and is written as a TLV if `Some`. When reading, an
975
- /// optional field of type `$ty` is read. The code in `$read` is always executed after all TLVs
976
- /// have been read.
973
+ /// If `$fieldty` is `(legacy, $ty, $read, $write)` then, when writing, the function $write will be
974
+ /// called with the object being serialized and a returned `Option` and is written as a TLV if
975
+ /// `Some`. When reading, an optional field of type `$ty` is read. The code in `$read` is always
976
+ /// executed after all TLVs have been read (and the read object may be accessed by its name) .
977
977
///
978
978
/// For example,
979
979
/// ```
@@ -1001,8 +1001,8 @@ macro_rules! impl_writeable_tlv_based {
1001
1001
( $st: ident, { $( ( $type: expr, $field: ident, $fieldty: tt) ) ,* $( , ) * } ) => {
1002
1002
impl $crate:: util:: ser:: Writeable for $st {
1003
1003
fn write<W : $crate:: util:: ser:: Writer >( & self , writer: & mut W ) -> Result <( ) , $crate:: io:: Error > {
1004
- $crate:: write_tlv_fields !( writer, {
1005
- $( ( $type, self . $field, $fieldty) ) ,*
1004
+ $crate:: _encode_varint_length_prefixed_tlv !( writer, {
1005
+ $( ( $type, self . $field, $fieldty, self ) ) ,*
1006
1006
} ) ;
1007
1007
Ok ( ( ) )
1008
1008
}
@@ -1014,7 +1014,7 @@ macro_rules! impl_writeable_tlv_based {
1014
1014
#[ allow( unused_mut) ]
1015
1015
let mut len = $crate:: util:: ser:: LengthCalculatingWriter ( 0 ) ;
1016
1016
$(
1017
- $crate:: _get_varint_length_prefixed_tlv_length!( len, $type, self . $field, $fieldty) ;
1017
+ $crate:: _get_varint_length_prefixed_tlv_length!( len, $type, self . $field, $fieldty, self ) ;
1018
1018
) *
1019
1019
len. 0
1020
1020
} ;
@@ -1130,8 +1130,8 @@ macro_rules! _impl_writeable_tlv_based_enum_common {
1130
1130
$( $st:: $variant_name { $( ref $field: $fieldty, ) * .. } => {
1131
1131
let id: u8 = $variant_id;
1132
1132
id. write( writer) ?;
1133
- $crate:: write_tlv_fields !( writer, {
1134
- $( ( $type, * $field, $fieldty) ) ,*
1133
+ $crate:: _encode_varint_length_prefixed_tlv !( writer, {
1134
+ $( ( $type, * $field, $fieldty, self ) ) ,*
1135
1135
} ) ;
1136
1136
} ) ,*
1137
1137
$( $st:: $tuple_variant_name ( ref field) => {
0 commit comments