bee_inx/node/
status.rs

1// Copyright 2022 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use bee_block as bee;
5use inx::proto;
6
7use crate::{maybe_missing, Milestone, ProtocolParameters};
8
9/// The [`NodeStatus`] type.
10#[derive(Clone, Debug, PartialEq, Eq)]
11pub struct NodeStatus {
12    /// Signals if the node is healthy.
13    pub is_healthy: bool,
14    /// Signals if the node is synced.
15    pub is_synced: bool,
16    /// Signals if the node is almost synced (within a configured range).
17    pub is_almost_synced: bool,
18    /// The latest milestone seen by the node.
19    pub latest_milestone: Milestone,
20    /// The last confirmed milestone.
21    pub confirmed_milestone: Milestone,
22    /// The current protocol parameters.
23    pub current_protocol_parameters: ProtocolParameters,
24    /// The tangle pruning index of the node.
25    pub tangle_pruning_index: bee::payload::milestone::MilestoneIndex,
26    /// The milestones pruning index of the node.
27    pub milestones_pruning_index: bee::payload::milestone::MilestoneIndex,
28    /// The ledger pruning index of the node.
29    pub ledger_pruning_index: bee::payload::milestone::MilestoneIndex,
30    /// The ledger index of the node.
31    pub ledger_index: bee::payload::milestone::MilestoneIndex,
32}
33
34impl TryFrom<proto::NodeStatus> for NodeStatus {
35    type Error = bee::InxError;
36
37    fn try_from(value: proto::NodeStatus) -> Result<Self, Self::Error> {
38        Ok(NodeStatus {
39            is_healthy: value.is_healthy,
40            is_synced: value.is_synced,
41            is_almost_synced: value.is_almost_synced,
42            latest_milestone: maybe_missing!(value.latest_milestone).try_into()?,
43            confirmed_milestone: maybe_missing!(value.confirmed_milestone).try_into()?,
44            current_protocol_parameters: maybe_missing!(value.current_protocol_parameters).into(),
45            tangle_pruning_index: value.tangle_pruning_index.into(),
46            milestones_pruning_index: value.milestones_pruning_index.into(),
47            ledger_pruning_index: value.ledger_pruning_index.into(),
48            ledger_index: value.ledger_index.into(),
49        })
50    }
51}
52
53impl From<NodeStatus> for proto::NodeStatus {
54    fn from(value: NodeStatus) -> Self {
55        Self {
56            is_healthy: value.is_healthy,
57            is_synced: value.is_synced,
58            is_almost_synced: value.is_almost_synced,
59            latest_milestone: Some(value.latest_milestone.into()),
60            confirmed_milestone: Some(value.confirmed_milestone.into()),
61            current_protocol_parameters: Some(value.current_protocol_parameters.into()),
62            tangle_pruning_index: value.tangle_pruning_index.0,
63            milestones_pruning_index: value.milestones_pruning_index.0,
64            ledger_pruning_index: value.ledger_pruning_index.0,
65            ledger_index: value.ledger_index.0,
66        }
67    }
68}