1package merkleTree
2
3import (
4	"encoding/hex"
5)
6
7func (n *Node) findChildByIndex(i ChildIndex) (Hash, error) {
8	if n.INodes == nil || int(i) >= len(n.INodes) {
9		return nil, ErrBadINode
10	}
11	return n.INodes[i], nil
12}
13
14func (n Node) export(h Hasher, prevRoot Hash, level Level) (hash Hash, node Node, objExported []byte, err error) {
15	if prevRoot != nil && level == Level(0) {
16		n.PrevRoot = prevRoot
17	}
18	objExported, err = encodeToBytes(n)
19	if err == nil {
20		hash = h.Hash(objExported)
21	}
22	return hash, n, objExported, err
23}
24
25// MarshalJSON prints out a hash for debugging purposes. Not recommended for actual
26// JSONing
27func (h Hash) MarshalJSON() ([]byte, error) {
28	if len(h) == 0 {
29		return []byte("\"\""), nil
30	}
31	return []byte("\"" + hex.EncodeToString(h)[0:8] + "\""), nil
32}
33
34func (n *Node) findValueInLeaf(h Hash) interface{} {
35	kvp := newSortedMapFromNode(n).find(h)
36	if kvp == nil {
37		return nil
38	}
39	return kvp.Value
40}
41