merkletree-rs/src/node.rs
src/node.rsRaw
1use utils;
2
3
4#[allow(dead_code)]
5pub struct TreeNode {
6 pub child_l: [u8;32],
7 pub child_r: [u8;32],
8}
9
10impl TreeNode {
11 #[allow(dead_code)]
12 pub fn bytes(&self) -> Vec<u8> {
13 concatenate_arrays(&self.child_l, &self.child_r)
14 }
15 #[allow(dead_code)]
16 pub fn ht(&self) -> [u8;32] {
17 utils::hash_vec(self.bytes())
18 }
19}
20
21fn concatenate_arrays<T: Clone>(x: &[T], y: &[T]) -> Vec<T> {
22 let mut concat = x.to_vec();
23 concat.extend_from_slice(y);
24
25 concat
26}
27
28pub fn parse_node_bytes(b: Vec<u8>) -> TreeNode {
29 if b==::EMPTYNODEVALUE {
30 let n = TreeNode {
31 child_l: ::EMPTYNODEVALUE,
32 child_r: ::EMPTYNODEVALUE,
33 };
34 return n;
35 }
36 let child_l = &b[0..32];
37 let child_r = &b[32..];
38 TreeNode {
39 child_l: *array_ref!(child_l, 0, 32),
40 child_r: *array_ref!(child_r, 0, 32),
41 }
42}
43
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48 use rustc_hex::ToHex;
49
50 #[test]
51 fn test_hash_vec() {
52 let n = TreeNode {
53 child_l: ::EMPTYNODEVALUE,
54 child_r: ::EMPTYNODEVALUE,
55 };
56 assert_eq!("ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", n.ht().to_hex())
57 }
58}