dmtree 0.1.0-alpha.1

A library to enable publishing a merkle tree over a Distributed Hash Table.
Documentation
use serde::Serialize;

#[derive(Serialize, Clone, Debug)]
pub struct SiblingInfo {
	pub position_in_group: i32,
	pub tree_node_hash: String,
}

impl SiblingInfo {
	pub fn new(position: i32, path: String) -> SiblingInfo {
		Self { position_in_group: position, tree_node_hash: path }
	}
}

#[derive(Serialize, Clone, Debug)]
pub struct NodeInfo {
	node_hash: String,
	is_group: bool,
	group_siblings: Vec<Option<SiblingInfo>>,
	data_siblings: Vec<Option<SiblingInfo>>,
}

impl NodeInfo {
	pub fn new(node_hash: String, is_group: bool) -> NodeInfo {
		Self { node_hash, is_group, group_siblings: vec![], data_siblings: vec![] }
	}

	pub fn add_group_siblings(&mut self, mut group_roots: Vec<Option<SiblingInfo>>) {
		self.group_siblings.append(&mut group_roots);
	}

	pub fn add_data_siblings(&mut self, mut data_roots: Vec<Option<SiblingInfo>>) {
		self.data_siblings.append(&mut data_roots);
	}

	pub fn get_group_siblings(&self) -> Vec<Option<SiblingInfo>> {
		self.group_siblings.clone()
	}

	pub fn get_data_siblings(&self) -> Vec<Option<SiblingInfo>> {
		self.data_siblings.clone()
	}

}


#[derive(Serialize, Clone, Debug)]
pub struct PathInfo {
	nodes_in_path: Vec<NodeInfo>,
}

impl PathInfo {
	pub fn new(path: Vec<NodeInfo>) -> PathInfo {
		Self { nodes_in_path: path }
	}

	pub fn get_nodes(&self) -> Vec<NodeInfo> {
		self.nodes_in_path.clone()
	}
}