Skip to main content

miden_client/rpc/domain/
status.rs

1use alloc::string::String;
2use core::convert::TryInto;
3
4use miden_protocol::Word;
5
6use crate::rpc::{RpcError, generated as proto};
7
8/// Represents node status info with fields converted into domain types.
9pub struct RpcStatusInfo {
10    pub version: String,
11    pub genesis_commitment: Option<Word>,
12    pub store: Option<StoreStatusInfo>,
13    pub block_producer: Option<BlockProducerStatusInfo>,
14}
15
16/// Represents store status info with fields converted into domain types.
17pub struct StoreStatusInfo {
18    pub version: String,
19    pub status: String,
20    pub chain_tip: u32,
21}
22
23/// Represents block producer status info with fields converted into domain types.
24pub struct BlockProducerStatusInfo {
25    pub version: String,
26    pub status: String,
27    pub chain_tip: u32,
28    pub mempool_stats: Option<MempoolStatsInfo>,
29}
30
31/// Represents mempool stats with fields converted into domain types.
32pub struct MempoolStatsInfo {
33    pub unbatched_transactions: u64,
34    pub proposed_batches: u64,
35    pub proven_batches: u64,
36}
37
38impl TryFrom<proto::rpc::RpcStatus> for RpcStatusInfo {
39    type Error = RpcError;
40
41    fn try_from(value: proto::rpc::RpcStatus) -> Result<Self, Self::Error> {
42        let genesis_commitment = value.genesis_commitment.map(TryInto::try_into).transpose()?;
43        Ok(Self {
44            version: value.version,
45            genesis_commitment,
46            store: value.store.map(Into::into),
47            block_producer: value.block_producer.map(Into::into),
48        })
49    }
50}
51
52impl From<proto::rpc::StoreStatus> for StoreStatusInfo {
53    fn from(value: proto::rpc::StoreStatus) -> Self {
54        Self {
55            version: value.version,
56            status: value.status,
57            chain_tip: value.chain_tip,
58        }
59    }
60}
61
62impl From<proto::rpc::BlockProducerStatus> for BlockProducerStatusInfo {
63    fn from(value: proto::rpc::BlockProducerStatus) -> Self {
64        Self {
65            version: value.version,
66            status: value.status,
67            chain_tip: value.chain_tip,
68            mempool_stats: value.mempool_stats.map(Into::into),
69        }
70    }
71}
72
73impl From<proto::rpc::MempoolStats> for MempoolStatsInfo {
74    fn from(value: proto::rpc::MempoolStats) -> Self {
75        Self {
76            unbatched_transactions: value.unbatched_transactions,
77            proposed_batches: value.proposed_batches,
78            proven_batches: value.proven_batches,
79        }
80    }
81}