1use serde::{Deserialize, Serialize};
7
8pub trait MerkleShape {
9 fn depth(&self) -> usize;
10 fn leafs(&self) -> usize;
11 fn shape(&self) -> (usize, usize, usize) {
12 (self.depth(), self.leafs(), self.size())
13 }
14 fn size(&self) -> usize;
15}
16
17#[derive(
18 Clone, Copy, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize,
19)]
20pub struct MerkleDimension {
21 pub depth: usize,
22 pub leafs: usize,
23 pub size: usize,
24}
25
26impl MerkleDimension {
27 pub fn new(depth: usize, leafs: usize, size: usize) -> Self {
28 Self { depth, leafs, size }
29 }
30}
31
32impl MerkleShape for MerkleDimension {
33 fn depth(&self) -> usize {
34 self.depth
35 }
36
37 fn leafs(&self) -> usize {
38 self.leafs
39 }
40 fn size(&self) -> usize {
41 self.size
42 }
43}
44
45impl std::fmt::Display for MerkleDimension {
46 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47 write!(f, "({}, {}, {})", self.depth, self.leafs, self.size)
48 }
49}
50
51impl From<Box<dyn MerkleShape>> for MerkleDimension {
52 fn from(data: Box<dyn MerkleShape>) -> Self {
53 Self::from(data.shape())
54 }
55}
56
57impl From<(usize, usize, usize)> for MerkleDimension {
58 fn from(data: (usize, usize, usize)) -> Self {
59 Self::new(data.0, data.1, data.2)
60 }
61}