use crate::{channel::Channel, node, rpc, serializers, Time};
use serde::{Deserialize, Serialize};
use std::{
fmt::{self, Display},
net::IpAddr,
time::Duration,
};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Request;
impl rpc::Request for Request {
type Response = Response;
fn method(&self) -> rpc::Method {
rpc::Method::NetInfo
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Response {
pub listening: bool,
pub listeners: Vec<Listener>,
#[serde(
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
pub n_peers: u64,
pub peers: Vec<PeerInfo>,
}
impl rpc::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",
serialize_with = "serializers::serialize_duration",
deserialize_with = "serializers::parse_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",
serialize_with = "serializers::serialize_duration",
deserialize_with = "serializers::parse_duration"
)]
pub duration: Duration,
#[serde(
rename = "Idle",
serialize_with = "serializers::serialize_duration",
deserialize_with = "serializers::parse_duration"
)]
pub idle: Duration,
#[serde(
rename = "Bytes",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
bytes: u64,
#[serde(
rename = "Samples",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
samples: u64,
#[serde(
rename = "InstRate",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
inst_rate: u64,
#[serde(
rename = "CurRate",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
cur_rate: u64,
#[serde(
rename = "AvgRate",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
avg_rate: u64,
#[serde(
rename = "PeakRate",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
peak_rate: u64,
#[serde(
rename = "BytesRem",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
bytes_rem: u64,
#[serde(
rename = "TimeRem",
serialize_with = "serializers::serialize_u64",
deserialize_with = "serializers::parse_u64"
)]
time_rem: u64,
#[serde(rename = "Progress")]
progress: u64,
}