Skip to content

Commit 18d9953

Browse files
committed
f Switch to {read,write}_tlv_fields
1 parent 7f2faaf commit 18d9953

File tree

1 file changed

+34
-37
lines changed

1 file changed

+34
-37
lines changed

src/wallet/ser.rs

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
// accordance with one or both of these licenses.
77

88
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};
1311

1412
use bdk_chain::bdk_core::{BlockId, ConfirmationBlockTime};
1513
use bdk_chain::indexer::keychain_txout::ChangeSet as BdkIndexerChangeSet;
@@ -31,24 +29,6 @@ use std::sync::Arc;
3129
pub(crate) struct ChangeSetSerWrapper<'a, T>(pub &'a T);
3230
pub(crate) struct ChangeSetDeserWrapper<T>(pub T);
3331

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-
5232
impl<'a> Writeable for ChangeSetSerWrapper<'a, Descriptor<DescriptorPublicKey>> {
5333
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
5434
self.0.to_string().write(writer)
@@ -141,8 +121,10 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BTreeSet<(ConfirmationBlockTime,
141121
let len = BigSize(self.0.len() as u64);
142122
len.write(writer)?;
143123
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+
});
146128
}
147129
Ok(())
148130
}
@@ -153,10 +135,14 @@ impl Readable for ChangeSetDeserWrapper<BTreeSet<(ConfirmationBlockTime, Txid)>>
153135
let len: BigSize = Readable::read(reader)?;
154136
let mut set = BTreeSet::new();
155137
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()));
160146
}
161147
Ok(Self(set))
162148
}
@@ -167,7 +153,9 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BTreeSet<Arc<Transaction>>> {
167153
let len = BigSize(self.0.len() as u64);
168154
len.write(writer)?;
169155
for tx in self.0.iter() {
170-
write_len_prefixed_field!(writer, tx)?;
156+
write_tlv_fields!(writer, {
157+
(0, tx, required),
158+
});
171159
}
172160
Ok(())
173161
}
@@ -178,8 +166,11 @@ impl Readable for ChangeSetDeserWrapper<BTreeSet<Arc<Transaction>>> {
178166
let len: BigSize = Readable::read(reader)?;
179167
let mut set = BTreeSet::new();
180168
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()));
183174
}
184175
Ok(Self(set))
185176
}
@@ -258,8 +249,10 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BTreeMap<DescriptorId, u32>> {
258249
let len = BigSize(self.0.len() as u64);
259250
len.write(writer)?;
260251
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+
});
263256
}
264257
Ok(())
265258
}
@@ -270,10 +263,14 @@ impl Readable for ChangeSetDeserWrapper<BTreeMap<DescriptorId, u32>> {
270263
let len: BigSize = Readable::read(reader)?;
271264
let mut set = BTreeMap::new();
272265
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());
277274
}
278275
Ok(Self(set))
279276
}

0 commit comments

Comments
 (0)