#[derive(Debug, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum StatsBackend {
BackendGoPion,
BackendWebrtcRs,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct StatsConnection {
pub pub_key: [u8; 32],
pub send_message_count: u64,
pub send_bytes: u64,
pub recv_message_count: u64,
pub recv_bytes: u64,
pub opened_at_s: u64,
pub is_webrtc: bool,
}
impl std::fmt::Debug for StatsConnection {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use base64::Engine;
let k = base64::engine::general_purpose::URL_SAFE_NO_PAD
.encode(self.pub_key);
f.debug_struct("StatsConnection")
.field("pub_key", &k)
.field("send_message_count", &self.send_message_count)
.field("send_bytes", &self.send_bytes)
.field("recv_message_count", &self.recv_message_count)
.field("recv_bytes", &self.recv_bytes)
.field("opened_at_s", &self.opened_at_s)
.field("is_webrtc", &self.is_webrtc)
.finish()
}
}
#[derive(Debug, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct Stats {
pub backend: StatsBackend,
pub peer_url_list: Vec<crate::PeerUrl>,
pub connection_list: Vec<StatsConnection>,
}