hdp_primitives/processed_types/
header.rs1use alloy::hex;
2use serde::{Deserialize, Serialize};
3use serde_with::serde_as;
4
5use crate::{
6 block::header::RlpBlockHeader,
7 serde::{deserialize_hex, serialize_hex},
8};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq, Hash)]
11pub struct ProcessedHeaderProof {
12 pub leaf_idx: u64,
13 pub mmr_path: Vec<String>,
14}
15
16impl ProcessedHeaderProof {
17 pub fn new(leaf_idx: u64, mmr_path: Vec<String>) -> Self {
18 ProcessedHeaderProof { leaf_idx, mmr_path }
19 }
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq, Hash)]
23#[serde_as]
24pub struct ProcessedHeader {
25 #[serde(serialize_with = "serialize_hex", deserialize_with = "deserialize_hex")]
26 pub rlp: Vec<u8>,
27 pub proof: ProcessedHeaderProof,
28}
29
30impl ProcessedHeader {
31 pub fn new(rlp: RlpBlockHeader, leaf_idx: u64, mmr_path: Vec<String>) -> Self {
32 let rlp = hex::decode(rlp.value).expect("Cannot decode RLP block header to bytes");
33 let proof = ProcessedHeaderProof::new(leaf_idx, mmr_path);
34 ProcessedHeader { rlp, proof }
35 }
36}