use miden_protocol::block::{BlockHeader, BlockNumber};
use miden_protocol::crypto::merkle::mmr::MmrDelta;
use crate::rpc::domain::MissingFieldHelper;
use crate::rpc::{RpcError, generated as proto};
pub struct ChainMmrInfo {
pub block_from: BlockNumber,
pub block_to: BlockNumber,
pub mmr_delta: MmrDelta,
pub block_header: BlockHeader,
}
impl TryFrom<proto::rpc::SyncChainMmrResponse> for ChainMmrInfo {
type Error = RpcError;
fn try_from(value: proto::rpc::SyncChainMmrResponse) -> Result<Self, Self::Error> {
let block_range = value
.block_range
.ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(block_range)))?;
let mmr_delta = value
.mmr_delta
.ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(mmr_delta)))?
.try_into()?;
let block_header = value
.block_header
.ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(block_header)))?
.try_into()?;
Ok(Self {
block_from: block_range.block_from.into(),
block_to: block_range
.block_to
.ok_or(proto::rpc::SyncChainMmrResponse::missing_field(stringify!(
block_range.block_to
)))?
.into(),
mmr_delta,
block_header,
})
}
}