reth_network_p2p/block_access_lists/
client.rs1use crate::{download::DownloadClient, error::PeerRequestResult, priority::Priority};
2use alloy_primitives::B256;
3use auto_impl::auto_impl;
4use futures::Future;
5use reth_eth_wire_types::BlockAccessLists;
6
7#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
10pub enum BalRequirement {
11 Mandatory,
13 #[default]
15 Optional,
16}
17
18#[auto_impl(&, Arc, Box)]
20pub trait BlockAccessListsClient: DownloadClient {
21 type Output: Future<Output = PeerRequestResult<BlockAccessLists>> + Send + Sync + Unpin;
23
24 fn get_block_access_lists(&self, hashes: Vec<B256>) -> Self::Output {
26 self.get_block_access_lists_with_priority_and_requirement(
27 hashes,
28 Priority::Normal,
29 BalRequirement::default(),
30 )
31 }
32
33 fn get_block_access_lists_with_requirement(
35 &self,
36 hashes: Vec<B256>,
37 requirement: BalRequirement,
38 ) -> Self::Output {
39 self.get_block_access_lists_with_priority_and_requirement(
40 hashes,
41 Priority::Normal,
42 requirement,
43 )
44 }
45
46 fn get_block_access_lists_with_priority(
48 &self,
49 hashes: Vec<B256>,
50 priority: Priority,
51 ) -> Self::Output {
52 self.get_block_access_lists_with_priority_and_requirement(
53 hashes,
54 priority,
55 BalRequirement::default(),
56 )
57 }
58
59 fn get_block_access_lists_with_priority_and_requirement(
61 &self,
62 hashes: Vec<B256>,
63 priority: Priority,
64 requirement: BalRequirement,
65 ) -> Self::Output;
66}