3333#[ doc( hidden) ]
3434#[ macro_export]
3535macro_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 ) ? ) => {
3737 $crate:: _encode_tlv!( $stream, $type, $field, required)
3838 } ;
39- ( $stream: expr, $type: expr, $field: expr, ( static_value, $value: expr) ) => {
39+ ( $stream: expr, $type: expr, $field: expr, ( static_value, $value: expr) $ ( , $self : ident ) ? ) => {
4040 let _ = & $field; // Ensure we "use" the $field
4141 } ;
42- ( $stream: expr, $type: expr, $field: expr, required) => {
42+ ( $stream: expr, $type: expr, $field: expr, required $ ( , $self : ident ) ? ) => {
4343 BigSize ( $type) . write( $stream) ?;
4444 BigSize ( $field. serialized_length( ) as u64 ) . write( $stream) ?;
4545 $field. write( $stream) ?;
4646 } ;
47- ( $stream: expr, $type: expr, $field: expr, required_vec) => {
47+ ( $stream: expr, $type: expr, $field: expr, required_vec $ ( , $self : ident ) ? ) => {
4848 $crate:: _encode_tlv!( $stream, $type, $crate:: util:: ser:: WithoutLength ( & $field) , required) ;
4949 } ;
50- ( $stream: expr, $optional_type: expr, $optional_field: expr, option) => {
50+ ( $stream: expr, $optional_type: expr, $optional_field: expr, option $ ( , $self : ident ) ? ) => {
5151 if let Some ( ref field) = $optional_field {
5252 BigSize ( $optional_type) . write( $stream) ?;
5353 BigSize ( field. serialized_length( ) as u64 ) . write( $stream) ?;
5454 field. write( $stream) ?;
5555 }
5656 } ;
57- ( $stream: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $write: expr) ) => {
58- $crate:: _encode_tlv!( $stream, $optional_type, $write, option) ;
57+ ( $stream: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $write: expr) $ ( , $self : ident ) ? ) => {
58+ $crate:: _encode_tlv!( $stream, $optional_type, $write( $ ( $self ) ? ) , option) ;
5959 } ;
60- ( $stream: expr, $type: expr, $field: expr, optional_vec) => {
60+ ( $stream: expr, $type: expr, $field: expr, optional_vec $ ( , $self : ident ) ? ) => {
6161 if !$field. is_empty( ) {
6262 $crate:: _encode_tlv!( $stream, $type, $field, required_vec) ;
6363 }
6464 } ;
65- ( $stream: expr, $type: expr, $field: expr, upgradable_required) => {
65+ ( $stream: expr, $type: expr, $field: expr, upgradable_required $ ( , $self : ident ) ? ) => {
6666 $crate:: _encode_tlv!( $stream, $type, $field, required) ;
6767 } ;
68- ( $stream: expr, $type: expr, $field: expr, upgradable_option) => {
68+ ( $stream: expr, $type: expr, $field: expr, upgradable_option $ ( , $self : ident ) ? ) => {
6969 $crate:: _encode_tlv!( $stream, $type, $field, option) ;
7070 } ;
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 ) ? ) ) => {
7272 $crate:: _encode_tlv!( $stream, $type, $field. map( |f| $encoding( f) ) , option) ;
7373 } ;
74- ( $stream: expr, $type: expr, $field: expr, ( option, encoding: $fieldty: ty) ) => {
74+ ( $stream: expr, $type: expr, $field: expr, ( option, encoding: $fieldty: ty) $ ( , $self : ident ) ? ) => {
7575 $crate:: _encode_tlv!( $stream, $type, $field, option) ;
7676 } ;
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 ) ? ) => {
7878 // Just a read-mapped type
7979 $crate:: _encode_tlv!( $stream, $type, $field, option) ;
8080 } ;
@@ -146,10 +146,10 @@ macro_rules! encode_tlv_stream {
146146#[ doc( hidden) ]
147147#[ macro_export]
148148macro_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 ) ? ) ) ,* } , & [ ] )
151151 } } ;
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) => { {
153153 #[ allow( unused_imports) ]
154154 use $crate:: {
155155 ln:: msgs:: DecodeError ,
@@ -159,7 +159,7 @@ macro_rules! _encode_tlv_stream {
159159 } ;
160160
161161 $(
162- $crate:: _encode_tlv!( $stream, $type, $field, $fieldty) ;
162+ $crate:: _encode_tlv!( $stream, $type, $field, $fieldty $ ( , $self ) ? ) ;
163163 ) *
164164 for tlv in $extra_tlvs {
165165 let ( typ, value) : & ( u64 , Vec <u8 >) = tlv;
@@ -188,23 +188,23 @@ macro_rules! _encode_tlv_stream {
188188#[ doc( hidden) ]
189189#[ macro_export]
190190macro_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 ) ? ) => {
192192 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required)
193193 } ;
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 ) ? ) => {
196196 BigSize ( $type) . write( & mut $len) . expect( "No in-memory data may fail to serialize" ) ;
197197 let field_len = $field. serialized_length( ) ;
198198 BigSize ( field_len as u64 )
199199 . write( & mut $len)
200200 . expect( "No in-memory data may fail to serialize" ) ;
201201 $len. 0 += field_len;
202202 } ;
203- ( $len: expr, $type: expr, $field: expr, required_vec) => {
203+ ( $len: expr, $type: expr, $field: expr, required_vec $ ( , $self : ident ) ? ) => {
204204 let field = $crate:: util:: ser:: WithoutLength ( & $field) ;
205205 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, field, required) ;
206206 } ;
207- ( $len: expr, $optional_type: expr, $optional_field: expr, option) => {
207+ ( $len: expr, $optional_type: expr, $optional_field: expr, option $ ( , $self : ident ) ? ) => {
208208 if let Some ( ref field) = $optional_field {
209209 BigSize ( $optional_type)
210210 . write( & mut $len)
@@ -216,25 +216,25 @@ macro_rules! _get_varint_length_prefixed_tlv_length {
216216 $len. 0 += field_len;
217217 }
218218 } ;
219- ( $len: expr, $optional_type: expr, $optional_field: expr, ( legacy, $fieldty: ty, $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, $write: expr) $ ( , $self : ident ) ? ) => {
220+ $crate:: _get_varint_length_prefixed_tlv_length!( $len, $optional_type, $write( $ ( $self ) ? ) , option) ;
221221 } ;
222- ( $len: expr, $type: expr, $field: expr, optional_vec) => {
222+ ( $len: expr, $type: expr, $field: expr, optional_vec $ ( , $self : ident ) ? ) => {
223223 if !$field. is_empty( ) {
224224 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required_vec) ;
225225 }
226226 } ;
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 ) ? ) => {
228228 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, option) ;
229229 } ;
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 ) ? ) => {
231231 let field = $field. map( |f| $encoding( f) ) ;
232232 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, field, option) ;
233233 } ;
234- ( $len: expr, $type: expr, $field: expr, upgradable_required) => {
234+ ( $len: expr, $type: expr, $field: expr, upgradable_required $ ( , $self : ident ) ? ) => {
235235 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, required) ;
236236 } ;
237- ( $len: expr, $type: expr, $field: expr, upgradable_option) => {
237+ ( $len: expr, $type: expr, $field: expr, upgradable_option $ ( , $self : ident ) ? ) => {
238238 $crate:: _get_varint_length_prefixed_tlv_length!( $len, $type, $field, option) ;
239239 } ;
240240}
@@ -244,18 +244,18 @@ macro_rules! _get_varint_length_prefixed_tlv_length {
244244#[ doc( hidden) ]
245245#[ macro_export]
246246macro_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 ) ? ) ) ,* } , & [ ] )
249249 } } ;
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) => { {
251251 extern crate alloc;
252252 use $crate:: util:: ser:: BigSize ;
253253 use alloc:: vec:: Vec ;
254254 let len = {
255255 #[ allow( unused_mut) ]
256256 let mut len = $crate:: util:: ser:: LengthCalculatingWriter ( 0 ) ;
257257 $(
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 ) ? ) ;
259259 ) *
260260 for tlv in $extra_tlvs {
261261 let ( typ, value) : & ( u64 , Vec <u8 >) = tlv;
@@ -264,7 +264,7 @@ macro_rules! _encode_varint_length_prefixed_tlv {
264264 len. 0
265265 } ;
266266 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) ;
268268 } } ;
269269}
270270
@@ -950,10 +950,10 @@ macro_rules! _decode_and_build {
950950/// If `$fieldty` is `option`, then `$field` is optional field.
951951/// If `$fieldty` is `optional_vec`, then `$field` is a [`Vec`], which needs to have its individual elements serialized.
952952/// Note that for `optional_vec` no bytes are written if the vec is empty
953- /// If `$fieldty` is `(legacy, $ty, $write)` then, when writing, the expression $write will
954- /// be called which returns an `Option` and is written as a TLV if `Some`. When reading, an
955- /// optional field of type `$ty` is read (which can be used in later `default_value` or
956- /// `static_value` fields).
953+ /// If `$fieldty` is `(legacy, $ty, $write)` then, when writing, the function $write will be
954+ /// called with the object being serialized and a returned `Option` and is written as a TLV if
955+ /// `Some`. When reading, an optional field of type `$ty` is read (which can be used in later
956+ /// `default_value` or ` static_value` fields).
957957///
958958/// For example,
959959/// ```
@@ -981,8 +981,8 @@ macro_rules! impl_writeable_tlv_based {
981981 ( $st: ident, { $( ( $type: expr, $field: ident, $fieldty: tt) ) ,* $( , ) * } ) => {
982982 impl $crate:: util:: ser:: Writeable for $st {
983983 fn write<W : $crate:: util:: ser:: Writer >( & self , writer: & mut W ) -> Result <( ) , $crate:: io:: Error > {
984- $crate:: write_tlv_fields !( writer, {
985- $( ( $type, self . $field, $fieldty) ) ,*
984+ $crate:: _encode_varint_length_prefixed_tlv !( writer, {
985+ $( ( $type, self . $field, $fieldty, self ) ) ,*
986986 } ) ;
987987 Ok ( ( ) )
988988 }
@@ -994,7 +994,7 @@ macro_rules! impl_writeable_tlv_based {
994994 #[ allow( unused_mut) ]
995995 let mut len = $crate:: util:: ser:: LengthCalculatingWriter ( 0 ) ;
996996 $(
997- $crate:: _get_varint_length_prefixed_tlv_length!( len, $type, self . $field, $fieldty) ;
997+ $crate:: _get_varint_length_prefixed_tlv_length!( len, $type, self . $field, $fieldty, self ) ;
998998 ) *
999999 len. 0
10001000 } ;
@@ -1110,8 +1110,8 @@ macro_rules! _impl_writeable_tlv_based_enum_common {
11101110 $( $st:: $variant_name { $( ref $field: $fieldty, ) * .. } => {
11111111 let id: u8 = $variant_id;
11121112 id. write( writer) ?;
1113- $crate:: write_tlv_fields !( writer, {
1114- $( ( $type, * $field, $fieldty) ) ,*
1113+ $crate:: _encode_varint_length_prefixed_tlv !( writer, {
1114+ $( ( $type, * $field, $fieldty, self ) ) ,*
11151115 } ) ;
11161116 } ) ,*
11171117 $( $st:: $tuple_variant_name ( ref field) => {
0 commit comments