alloy_trie/proof/
retainer.rsuse crate::{proof::ProofNodes, Nibbles};
use alloy_primitives::Bytes;
#[allow(unused_imports)]
use alloc::vec::Vec;
#[derive(Default, Clone, Debug)]
pub struct ProofRetainer {
targets: Vec<Nibbles>,
proof_nodes: ProofNodes,
}
impl FromIterator<Nibbles> for ProofRetainer {
fn from_iter<T: IntoIterator<Item = Nibbles>>(iter: T) -> Self {
Self::new(FromIterator::from_iter(iter))
}
}
impl ProofRetainer {
pub fn new(targets: Vec<Nibbles>) -> Self {
Self { targets, proof_nodes: Default::default() }
}
pub fn matches(&self, prefix: &Nibbles) -> bool {
self.targets.iter().any(|target| target.starts_with(prefix))
}
pub fn into_proof_nodes(self) -> ProofNodes {
self.proof_nodes
}
pub fn retain(&mut self, prefix: &Nibbles, proof: &[u8]) {
if prefix.is_empty() || self.matches(prefix) {
self.proof_nodes.insert(prefix.clone(), Bytes::from(proof.to_vec()));
}
}
}