use crate::error::OxenError;
use crate::model::{
MerkleHash,
merkle_tree::node::{EMerkleTreeNode, MerkleTreeNode},
};
pub trait MerkleReader: Send + Sync {
fn exists(&self, hash: &MerkleHash) -> Result<bool, OxenError>;
fn get_node(&self, hash: &MerkleHash) -> Result<Option<MerkleEntry>, OxenError>;
fn get_children(
&self,
hash: &MerkleHash,
) -> Result<Vec<(MerkleHash, MerkleTreeNode)>, OxenError>;
fn read_full_node(&self, hash: &MerkleHash) -> Result<Option<MerkleTreeNode>, OxenError> {
let Some(node) = self.get_node(hash)? else {
return Ok(None);
};
let children = self.get_children(hash)?;
Ok(Some(MerkleTreeNode {
hash: *hash,
node: node.node,
parent_id: node.parent_id,
children: children.into_iter().map(|(_, c)| c).collect(),
}))
}
}
pub struct MerkleEntry {
pub node: EMerkleTreeNode,
pub parent_id: Option<MerkleHash>,
}