mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-27 00:06:34 +01:00
In order to avoid significant malloc traffic, messages previously explicitly stated their serialized length allowing for Vec preallocation during the message serialization pipeline. This added some amount of complexity in the serialization code, but did avoid some realloc() calls. Instead, here, we drop all the complexity in favor of a fixed 2KiB buffer for all message serialization. This should not only be simpler with a similar reduction in realloc() traffic, but also may reduce heap fragmentation by allocating identically-sized buffers more often.
41 lines
1.5 KiB
Rust
41 lines
1.5 KiB
Rust
// This file is auto-generated by gen_target.sh based on msg_target_template.txt
|
|
// To modify it, modify msg_target_template.txt and run gen_target.sh instead.
|
|
|
|
use bitcoin::hash_types::BlockHash;
|
|
|
|
use lightning::chain::channelmonitor;
|
|
use lightning::util::enforcing_trait_impls::EnforcingSigner;
|
|
use lightning::util::ser::{ReadableArgs, Writer, Writeable};
|
|
use lightning::util::test_utils::OnlyReadsKeysInterface;
|
|
|
|
use utils::test_logger;
|
|
|
|
use std::io::Cursor;
|
|
|
|
struct VecWriter(Vec<u8>);
|
|
impl Writer for VecWriter {
|
|
fn write_all(&mut self, buf: &[u8]) -> Result<(), ::std::io::Error> {
|
|
self.0.extend_from_slice(buf);
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[inline]
|
|
pub fn do_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
|
|
if let Ok((latest_block_hash, monitor)) = <(BlockHash, channelmonitor::ChannelMonitor<EnforcingSigner>)>::read(&mut Cursor::new(data), &OnlyReadsKeysInterface {}) {
|
|
let mut w = VecWriter(Vec::new());
|
|
monitor.write(&mut w).unwrap();
|
|
let deserialized_copy = <(BlockHash, channelmonitor::ChannelMonitor<EnforcingSigner>)>::read(&mut Cursor::new(&w.0), &OnlyReadsKeysInterface {}).unwrap();
|
|
assert!(latest_block_hash == deserialized_copy.0);
|
|
assert!(monitor == deserialized_copy.1);
|
|
}
|
|
}
|
|
|
|
pub fn chanmon_deser_test<Out: test_logger::Output>(data: &[u8], out: Out) {
|
|
do_test(data, out);
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn chanmon_deser_run(data: *const u8, datalen: usize) {
|
|
do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, test_logger::DevNull{});
|
|
}
|