use crate::{
Word,
merkle::{MerkleError, MerkleProof, SparseMerklePath},
};
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct SimpleSmtProof {
pub value: Word,
pub path: SparseMerklePath,
}
impl SimpleSmtProof {
pub fn new(value: Word, path: SparseMerklePath) -> Self {
Self { value, path }
}
}
impl From<(SparseMerklePath, Word)> for SimpleSmtProof {
fn from((path, value): (SparseMerklePath, Word)) -> Self {
SimpleSmtProof::new(value, path)
}
}
impl TryFrom<MerkleProof> for SimpleSmtProof {
type Error = MerkleError;
fn try_from(other: MerkleProof) -> Result<Self, MerkleError> {
let MerkleProof { value, path } = other;
let path = SparseMerklePath::try_from(path)?;
Ok(SimpleSmtProof { value, path })
}
}
impl From<SimpleSmtProof> for MerkleProof {
fn from(other: SimpleSmtProof) -> Self {
let SimpleSmtProof { value, path } = other;
MerkleProof { value, path: path.into() }
}
}
impl PartialEq<MerkleProof> for SimpleSmtProof {
fn eq(&self, rhs: &MerkleProof) -> bool {
self.value == rhs.value && self.path == rhs.path
}
}
impl PartialEq<SimpleSmtProof> for MerkleProof {
fn eq(&self, rhs: &SimpleSmtProof) -> bool {
rhs == self
}
}