multiversx_sdk/gateway/
gateway_network_status.rs

1use crate::data::network_status::{NetworkStatus, NetworkStatusResponse};
2use anyhow::anyhow;
3
4use super::{GatewayRequest, GatewayRequestType, GET_NETWORK_STATUS_ENDPOINT, METACHAIN_SHARD_ID};
5
6/// Retrieves the network status from the proxy.
7pub struct NetworkStatusRequest {
8    shard: u32,
9}
10
11impl NetworkStatusRequest {
12    pub fn new(shard: u32) -> Self {
13        NetworkStatusRequest { shard }
14    }
15}
16
17impl Default for NetworkStatusRequest {
18    fn default() -> Self {
19        Self {
20            shard: METACHAIN_SHARD_ID,
21        }
22    }
23}
24
25impl GatewayRequest for NetworkStatusRequest {
26    type Payload = ();
27    type DecodedJson = NetworkStatusResponse;
28    type Result = NetworkStatus;
29
30    fn request_type(&self) -> GatewayRequestType {
31        GatewayRequestType::Get
32    }
33
34    fn get_endpoint(&self) -> String {
35        format!("{GET_NETWORK_STATUS_ENDPOINT}/{}", self.shard)
36    }
37
38    fn process_json(&self, decoded: Self::DecodedJson) -> anyhow::Result<Self::Result> {
39        match decoded.data {
40            None => Err(anyhow!("{}", decoded.error)),
41            Some(b) => Ok(b.status),
42        }
43    }
44}