ibc_types_core_commitment/
root.rs

1use core::fmt::Debug;
2
3use crate::prelude::*;
4
5use ibc_proto::ibc::core::commitment::v1::MerkleRoot as RawMerkleRoot;
6use ibc_types_domain_type::DomainType;
7
8#[derive(Clone, PartialEq, Eq)]
9pub struct MerkleRoot {
10    pub hash: Vec<u8>,
11}
12
13impl Debug for MerkleRoot {
14    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
15        write!(f, "{:?}", hex::encode(&self.hash))
16    }
17}
18
19impl DomainType for MerkleRoot {
20    type Proto = RawMerkleRoot;
21}
22
23impl From<MerkleRoot> for RawMerkleRoot {
24    fn from(value: MerkleRoot) -> RawMerkleRoot {
25        RawMerkleRoot { hash: value.hash }
26    }
27}
28
29impl TryFrom<RawMerkleRoot> for MerkleRoot {
30    type Error = anyhow::Error;
31    fn try_from(value: RawMerkleRoot) -> Result<MerkleRoot, Self::Error> {
32        Ok(MerkleRoot { hash: value.hash })
33    }
34}