|
12 | 12 | }; |
13 | 13 | #[cfg(feature = "wincode")] |
14 | 14 | use { |
| 15 | + crate::{ |
| 16 | + legacy::MessageUninitBuilder as LegacyMessageUninitBuilder, MessageHeaderUninitBuilder, |
| 17 | + }, |
15 | 18 | core::mem::MaybeUninit, |
16 | 19 | wincode::{ |
17 | 20 | io::{Reader, Writer}, |
@@ -385,19 +388,23 @@ impl<'de> SchemaRead<'de> for VersionedMessage { |
385 | 388 | } |
386 | 389 |
|
387 | 390 | let mut msg = MaybeUninit::<LegacyMessage>::uninit(); |
| 391 | + let mut msg_builder = LegacyMessageUninitBuilder::from_maybe_uninit_mut(&mut msg); |
388 | 392 | // We've already read the variant byte which, in the legacy case, represents |
389 | 393 | // the `num_required_signatures` field. |
390 | 394 | // As such, we need to write the remaining fields into the message manually, |
391 | 395 | // as calling `LegacyMessage::read` will miss the first field. |
392 | | - let header_uninit = LegacyMessage::uninit_header_mut(&mut msg); |
393 | | - |
394 | | - MessageHeader::write_uninit_num_required_signatures(variant, header_uninit); |
395 | | - MessageHeader::read_num_readonly_signed_accounts(reader, header_uninit)?; |
396 | | - MessageHeader::read_num_readonly_unsigned_accounts(reader, header_uninit)?; |
397 | | - |
398 | | - LegacyMessage::read_account_keys(reader, &mut msg)?; |
399 | | - LegacyMessage::read_recent_blockhash(reader, &mut msg)?; |
400 | | - LegacyMessage::read_instructions(reader, &mut msg)?; |
| 396 | + let mut header_builder = |
| 397 | + MessageHeaderUninitBuilder::from_maybe_uninit_mut(msg_builder.uninit_header_mut()); |
| 398 | + header_builder.write_num_required_signatures(variant); |
| 399 | + header_builder.read_num_readonly_signed_accounts(reader)?; |
| 400 | + header_builder.read_num_readonly_unsigned_accounts(reader)?; |
| 401 | + header_builder.finish(); |
| 402 | + unsafe { msg_builder.assume_init_header() }; |
| 403 | + |
| 404 | + msg_builder.read_account_keys(reader)?; |
| 405 | + msg_builder.read_recent_blockhash(reader)?; |
| 406 | + msg_builder.read_instructions(reader)?; |
| 407 | + msg_builder.finish(); |
401 | 408 |
|
402 | 409 | let msg = unsafe { msg.assume_init() }; |
403 | 410 | dst.write(VersionedMessage::Legacy(msg)); |
|
0 commit comments