reth_downloaders/bodies/test_utils.rs
1//! Test helper impls for generating bodies
2
3#![allow(dead_code)]
4
5use alloy_consensus::BlockHeader;
6use alloy_primitives::map::B256Map;
7use reth_ethereum_primitives::BlockBody;
8use reth_network_p2p::bodies::response::BlockResponse;
9use reth_primitives_traits::{Block, SealedBlock, SealedHeader};
10
11pub(crate) fn zip_blocks<'a, B: Block>(
12 headers: impl Iterator<Item = &'a SealedHeader<B::Header>>,
13 bodies: &mut B256Map<B::Body>,
14) -> Vec<BlockResponse<B>> {
15 headers
16 .into_iter()
17 .map(|header| {
18 let body = bodies.remove(&header.hash()).expect("body exists");
19 if header.is_empty() {
20 BlockResponse::Empty(header.clone())
21 } else {
22 BlockResponse::Full(SealedBlock::from_sealed_parts(header.clone(), body))
23 }
24 })
25 .collect()
26}
27
28pub(crate) fn create_raw_bodies(
29 headers: impl IntoIterator<Item = SealedHeader>,
30 bodies: &mut B256Map<BlockBody>,
31) -> Vec<reth_ethereum_primitives::Block> {
32 headers
33 .into_iter()
34 .map(|header| {
35 let body = bodies.remove(&header.hash()).expect("body exists");
36 body.into_block(header.unseal())
37 })
38 .collect()
39}