use core::{
fmt::{self, Display},
time::Duration,
};
use std::net::IpAddr;
use serde::{Deserialize, Serialize};
use tendermint::{channel::Channel, node, serializers, Time};
use crate::prelude::*;
use crate::{dialect::Dialect, request::RequestMessage};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Request;
impl RequestMessage for Request {
fn method(&self) -> crate::Method {
crate::Method::NetInfo
}
}
impl<S: Dialect> crate::Request<S> for Request {
type Response = Response;
}
impl<S: Dialect> crate::SimpleRequest<S> for Request {
type Output = Response;
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Response {
pub listening: bool,
pub listeners: Vec<Listener>,
#[serde(with = "serializers::from_str")]
pub n_peers: u64,
pub peers: Vec<PeerInfo>,
}
impl crate::Response for Response {}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Listener(String);
impl Display for Listener {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct PeerInfo {
pub node_info: node::Info,
pub is_outbound: bool,
pub connection_status: ConnectionStatus,
pub remote_ip: IpAddr,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ConnectionStatus {
#[serde(rename = "Duration", with = "serializers::time_duration")]
pub duration: Duration,
#[serde(rename = "SendMonitor")]
pub send_monitor: Monitor,
#[serde(rename = "RecvMonitor")]
pub recv_monitor: Monitor,
#[serde(rename = "Channels")]
pub channels: Vec<Channel>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Monitor {
#[serde(rename = "Active")]
pub active: bool,
#[serde(rename = "Start")]
pub start: Time,
#[serde(rename = "Duration", with = "serializers::time_duration")]
pub duration: Duration,
#[serde(rename = "Idle", with = "serializers::time_duration")]
pub idle: Duration,
#[serde(rename = "Bytes", with = "serializers::from_str")]
pub bytes: u64,
#[serde(rename = "Samples", with = "serializers::from_str")]
pub samples: u64,
#[serde(rename = "InstRate", with = "serializers::from_str")]
pub inst_rate: u64,
#[serde(rename = "CurRate", with = "serializers::from_str")]
pub cur_rate: u64,
#[serde(rename = "AvgRate", with = "serializers::from_str")]
pub avg_rate: u64,
#[serde(rename = "PeakRate", with = "serializers::from_str")]
pub peak_rate: u64,
#[serde(rename = "BytesRem", with = "serializers::from_str")]
pub bytes_rem: u64,
#[serde(rename = "TimeRem", with = "serializers::from_str")]
pub time_rem: u64,
#[serde(rename = "Progress")]
pub progress: u64,
}