6
6
// accordance with one or both of these licenses.
7
7
8
8
use lightning:: ln:: msgs:: DecodeError ;
9
- use lightning:: util:: ser:: {
10
- BigSize , FixedLengthReader , Readable , RequiredWrapper , Writeable , Writer ,
11
- } ;
12
- use lightning:: { decode_tlv_stream, encode_tlv_stream} ;
9
+ use lightning:: util:: ser:: { BigSize , Readable , RequiredWrapper , Writeable , Writer } ;
10
+ use lightning:: { decode_tlv_stream, encode_tlv_stream, read_tlv_fields, write_tlv_fields} ;
13
11
14
12
use bdk_chain:: bdk_core:: { BlockId , ConfirmationBlockTime } ;
15
13
use bdk_chain:: indexer:: keychain_txout:: ChangeSet as BdkIndexerChangeSet ;
@@ -31,24 +29,6 @@ use std::sync::Arc;
31
29
pub ( crate ) struct ChangeSetSerWrapper < ' a , T > ( pub & ' a T ) ;
32
30
pub ( crate ) struct ChangeSetDeserWrapper < T > ( pub T ) ;
33
31
34
- macro_rules! write_len_prefixed_field {
35
- ( $writer: expr, $field: expr ) => { {
36
- // We serialize a length header to make sure we can accommodate future changes to the
37
- // BDK types.
38
- let len = BigSize ( $field. serialized_length( ) as u64 ) ;
39
- len. write( $writer) ?;
40
- $field. write( $writer)
41
- } } ;
42
- }
43
-
44
- macro_rules! read_len_prefixed_field {
45
- ( $reader: expr) => { {
46
- let field_len: BigSize = Readable :: read( $reader) ?;
47
- let mut fixed_reader = FixedLengthReader :: new( $reader, field_len. 0 ) ;
48
- Readable :: read( & mut fixed_reader)
49
- } } ;
50
- }
51
-
52
32
impl < ' a > Writeable for ChangeSetSerWrapper < ' a , Descriptor < DescriptorPublicKey > > {
53
33
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
54
34
self . 0 . to_string ( ) . write ( writer)
@@ -141,8 +121,10 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BTreeSet<(ConfirmationBlockTime,
141
121
let len = BigSize ( self . 0 . len ( ) as u64 ) ;
142
122
len. write ( writer) ?;
143
123
for ( time, txid) in self . 0 . iter ( ) {
144
- write_len_prefixed_field ! ( writer, ChangeSetSerWrapper ( time) ) ?;
145
- write_len_prefixed_field ! ( writer, txid) ?;
124
+ write_tlv_fields ! ( writer, {
125
+ ( 0 , ChangeSetSerWrapper ( time) , required) ,
126
+ ( 2 , txid, required) ,
127
+ } ) ;
146
128
}
147
129
Ok ( ( ) )
148
130
}
@@ -153,10 +135,14 @@ impl Readable for ChangeSetDeserWrapper<BTreeSet<(ConfirmationBlockTime, Txid)>>
153
135
let len: BigSize = Readable :: read ( reader) ?;
154
136
let mut set = BTreeSet :: new ( ) ;
155
137
for _ in 0 ..len. 0 {
156
- let time: ChangeSetDeserWrapper < ConfirmationBlockTime > =
157
- read_len_prefixed_field ! ( reader) ?;
158
- let txid: Txid = read_len_prefixed_field ! ( reader) ?;
159
- set. insert ( ( time. 0 , txid) ) ;
138
+ let mut time: RequiredWrapper < ChangeSetDeserWrapper < ConfirmationBlockTime > > =
139
+ RequiredWrapper ( None ) ;
140
+ let mut txid: RequiredWrapper < Txid > = RequiredWrapper ( None ) ;
141
+ read_tlv_fields ! ( reader, {
142
+ ( 0 , time, required) ,
143
+ ( 2 , txid, required) ,
144
+ } ) ;
145
+ set. insert ( ( time. 0 . unwrap ( ) . 0 , txid. 0 . unwrap ( ) ) ) ;
160
146
}
161
147
Ok ( Self ( set) )
162
148
}
@@ -167,7 +153,9 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BTreeSet<Arc<Transaction>>> {
167
153
let len = BigSize ( self . 0 . len ( ) as u64 ) ;
168
154
len. write ( writer) ?;
169
155
for tx in self . 0 . iter ( ) {
170
- write_len_prefixed_field ! ( writer, tx) ?;
156
+ write_tlv_fields ! ( writer, {
157
+ ( 0 , tx, required) ,
158
+ } ) ;
171
159
}
172
160
Ok ( ( ) )
173
161
}
@@ -178,8 +166,11 @@ impl Readable for ChangeSetDeserWrapper<BTreeSet<Arc<Transaction>>> {
178
166
let len: BigSize = Readable :: read ( reader) ?;
179
167
let mut set = BTreeSet :: new ( ) ;
180
168
for _ in 0 ..len. 0 {
181
- let tx: Transaction = read_len_prefixed_field ! ( reader) ?;
182
- set. insert ( Arc :: new ( tx) ) ;
169
+ let mut tx: RequiredWrapper < Transaction > = RequiredWrapper ( None ) ;
170
+ read_tlv_fields ! ( reader, {
171
+ ( 0 , tx, required) ,
172
+ } ) ;
173
+ set. insert ( Arc :: new ( tx. 0 . unwrap ( ) ) ) ;
183
174
}
184
175
Ok ( Self ( set) )
185
176
}
@@ -258,8 +249,10 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BTreeMap<DescriptorId, u32>> {
258
249
let len = BigSize ( self . 0 . len ( ) as u64 ) ;
259
250
len. write ( writer) ?;
260
251
for ( descriptor_id, last_index) in self . 0 . iter ( ) {
261
- write_len_prefixed_field ! ( writer, ChangeSetSerWrapper ( descriptor_id) ) ?;
262
- write_len_prefixed_field ! ( writer, last_index) ?;
252
+ write_tlv_fields ! ( writer, {
253
+ ( 0 , ChangeSetSerWrapper ( descriptor_id) , required) ,
254
+ ( 2 , last_index, required) ,
255
+ } ) ;
263
256
}
264
257
Ok ( ( ) )
265
258
}
@@ -270,10 +263,14 @@ impl Readable for ChangeSetDeserWrapper<BTreeMap<DescriptorId, u32>> {
270
263
let len: BigSize = Readable :: read ( reader) ?;
271
264
let mut set = BTreeMap :: new ( ) ;
272
265
for _ in 0 ..len. 0 {
273
- let descriptor_id: ChangeSetDeserWrapper < DescriptorId > =
274
- read_len_prefixed_field ! ( reader) ?;
275
- let last_index: u32 = read_len_prefixed_field ! ( reader) ?;
276
- set. insert ( descriptor_id. 0 , last_index) ;
266
+ let mut descriptor_id: RequiredWrapper < ChangeSetDeserWrapper < DescriptorId > > =
267
+ RequiredWrapper ( None ) ;
268
+ let mut last_index: RequiredWrapper < u32 > = RequiredWrapper ( None ) ;
269
+ read_tlv_fields ! ( reader, {
270
+ ( 0 , descriptor_id, required) ,
271
+ ( 2 , last_index, required) ,
272
+ } ) ;
273
+ set. insert ( descriptor_id. 0 . unwrap ( ) . 0 , last_index. 0 . unwrap ( ) ) ;
277
274
}
278
275
Ok ( Self ( set) )
279
276
}
0 commit comments