From 9df2b51813a56e22bae56d195c548abc8a0908af Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 16 May 2025 18:38:36 -0400 Subject: [PATCH] imple `Visitor` for `HashStorageMerkleTreeDeserializer` --- common/src/merkle_tree_public/merkle_tree.rs | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/common/src/merkle_tree_public/merkle_tree.rs b/common/src/merkle_tree_public/merkle_tree.rs index 70ca0f4..0dc3f6b 100644 --- a/common/src/merkle_tree_public/merkle_tree.rs +++ b/common/src/merkle_tree_public/merkle_tree.rs @@ -40,6 +40,32 @@ impl HashStorageMerkleTreeDeserializer { } } +impl<'de, Leav: TreeLeavItem + Clone + Deserialize<'de>> Visitor<'de> for HashStorageMerkleTreeDeserializer { + type Value= HashStorageMerkleTree; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("HashStorageMerkleTree key value sequence.") + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: SeqAccess<'de>, + { + let mut vector = vec![]; + + loop { + let opt_key = seq.next_element::()?; + if let Some(value) = opt_key { + vector.push(value); + } else { + break; + } + } + + Ok(HashStorageMerkleTree::new(vector)) + } +} + pub type PublicTransactionMerkleTree = HashStorageMerkleTree;