reth_eth_wire_types/
state.rs1use alloc::vec::Vec;
4use alloy_primitives::{Bytes, B256};
5use alloy_rlp::{RlpDecodableWrapper, RlpEncodableWrapper};
6use derive_more::{Deref, IntoIterator};
7use reth_codecs_derive::add_arbitrary_tests;
8
9#[derive(
13 Clone,
14 Debug,
15 PartialEq,
16 Eq,
17 RlpEncodableWrapper,
18 RlpDecodableWrapper,
19 Default,
20 Deref,
21 IntoIterator,
22)]
23#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
24#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
25#[add_arbitrary_tests(rlp)]
26pub struct GetNodeData(pub Vec<B256>);
27
28#[derive(
34 Clone,
35 Debug,
36 PartialEq,
37 Eq,
38 RlpEncodableWrapper,
39 RlpDecodableWrapper,
40 Default,
41 Deref,
42 IntoIterator,
43)]
44#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
45#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
46#[add_arbitrary_tests(rlp)]
47pub struct NodeData(pub Vec<Bytes>);
48
49#[cfg(test)]
50mod tests {
51 use alloy_primitives::hex;
52
53 use crate::{message::RequestPair, GetNodeData, NodeData};
54 use alloy_rlp::{Decodable, Encodable};
55
56 #[test]
57 fn encode_get_node_data() {
59 let expected = hex!(
60 "f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"
61 );
62 let mut data = vec![];
63 let request = RequestPair {
64 request_id: 1111,
65 message: GetNodeData(vec![
66 hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(),
67 hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(),
68 ]),
69 };
70 request.encode(&mut data);
71 assert_eq!(data, expected);
72 }
73
74 #[test]
75 fn decode_get_node_data() {
77 let data = hex!(
78 "f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"
79 );
80 let request = RequestPair::<GetNodeData>::decode(&mut &data[..]).unwrap();
81 assert_eq!(
82 request,
83 RequestPair {
84 request_id: 1111,
85 message: GetNodeData(vec![
86 hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(),
87 hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(),
88 ])
89 }
90 );
91 }
92
93 #[test]
94 fn encode_node_data() {
96 let expected = hex!("ce820457ca84deadc0de84feedbeef");
97 let mut data = vec![];
98 let request = RequestPair {
99 request_id: 1111,
100 message: NodeData(vec![
101 hex!("deadc0de").as_slice().into(),
102 hex!("feedbeef").as_slice().into(),
103 ]),
104 };
105 request.encode(&mut data);
106 assert_eq!(data, expected);
107 }
108
109 #[test]
110 fn decode_node_data() {
112 let data = hex!("ce820457ca84deadc0de84feedbeef");
113 let request = RequestPair::<NodeData>::decode(&mut &data[..]).unwrap();
114 assert_eq!(
115 request,
116 RequestPair {
117 request_id: 1111,
118 message: NodeData(vec![
119 hex!("deadc0de").as_slice().into(),
120 hex!("feedbeef").as_slice().into(),
121 ])
122 }
123 );
124 }
125}