Jelajahi Sumber

impl Encodable and Decodable for Vec<Node: Hashable>

ghassmo 5 tahun lalu
induk
melakukan
34eb0919db
2 mengubah file dengan 25 tambahan dan 21 penghapusan
  1. 25 20
      src/crypto/merkle.rs
  2. 0 1
      src/crypto/merkle_node.rs

+ 25 - 20
src/crypto/merkle.rs

@@ -229,21 +229,37 @@ pub struct IncrementalWitness<Node: Hashable> {
     cursor: Option<CommitmentTree<Node>>,
     cursor: Option<CommitmentTree<Node>>,
 }
 }
 
 
+impl<Node: Hashable> Encodable for Vec<Node> {
+    fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> {
+        let mut len = 0;
+        len += VarInt(self.len() as u64).encode(&mut s)?;
+        for c in self.iter() {
+            len += c.encode(&mut s)?;
+        }
+        Ok(len)
+    }
+}
+
+impl<Node: Hashable> Decodable for Vec<Node> {
+    fn decode<D: io::Read>(mut d: D) -> Result<Self> {
+        let len = VarInt::decode(&mut d)?.0;
+        let mut ret = Vec::with_capacity(len as usize);
+        for _ in 0..len {
+            ret.push(Decodable::decode(&mut d)?);
+        }
+        Ok(ret)
+    }
+}
 
 
 impl<Node: Hashable> Encodable for IncrementalWitness<Node> {
 impl<Node: Hashable> Encodable for IncrementalWitness<Node> {
     fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> {
     fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> {
         let mut len = 0;
         let mut len = 0;
         len += self.tree.encode(&mut s)?;
         len += self.tree.encode(&mut s)?;
 
 
-        len += VarInt(self.filled.len() as u64).encode(&mut s)?;
-        for c in self.filled.iter() {
-            len += c.encode(&mut s)?;
-        }
+        len += self.filled.encode(&mut s)?;
 
 
         len += self.cursor_depth.encode(&mut s)?;
         len += self.cursor_depth.encode(&mut s)?;
-        if let Some(v) = &self.cursor {
-            len += v.encode(&mut s)?;
-        }
+        len += self.cursor.encode(&mut s)?;
         Ok(len)
         Ok(len)
     }
     }
 }
 }
@@ -252,20 +268,9 @@ impl<Node: Hashable> Encodable for IncrementalWitness<Node> {
 
 
 impl<Node: Hashable> Decodable for IncrementalWitness<Node> {
 impl<Node: Hashable> Decodable for IncrementalWitness<Node> {
     fn decode<D: io::Read>(mut d: D) -> Result<Self> {
     fn decode<D: io::Read>(mut d: D) -> Result<Self> {
-        let tree = Decodable::decode(&mut d)?;
-
-        let filled = {
-            let len = VarInt::decode(&mut d)?.0;
-            let mut ret = Vec::with_capacity(len as usize);
-            for _ in 0..len {
-                ret.push(Decodable::decode(&mut d)?);
-            }
-            ret
-        };
-
         Ok(Self {
         Ok(Self {
-            tree,
-            filled,
+            tree: Decodable::decode(&mut d)?,
+            filled: Decodable::decode(&mut d)?,
             cursor_depth: Decodable::decode(&mut d)?,
             cursor_depth: Decodable::decode(&mut d)?,
             cursor: Decodable::decode(d)?,
             cursor: Decodable::decode(d)?,
         })
         })

+ 0 - 1
src/crypto/merkle_node.rs

@@ -144,4 +144,3 @@ lazy_static! {
     };
     };
 }
 }
 
 
-impl_vec!(MerkleNode);