use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Error {
pub code: u32,
pub message: String,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}: {}", self.message, self.code)
}
}
impl std::error::Error for Error {}
#[derive(Serialize, Deserialize, Debug)]
pub struct Reply {
pub error: Option<Error>,
pub result: Option<serde_json::Value>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ClientInfo {
pub user: String,
pub client: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub conn_info: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chan_info: Option<serde_json::Value>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Publication {
pub offset: u64,
pub data: serde_json::Value,
pub info: Option<ClientInfo>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct NodeInfo {
pub uid: String,
pub name: String,
pub version: String,
pub num_clients: u32,
pub num_users: u32,
pub num_channels: u32,
pub uptime: u32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct InfoResult {
pub nodes: Vec<NodeInfo>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct PublishResult {
pub offset: Option<u64>,
pub epoch: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct PublishResponse {
pub error: Option<Error>,
pub result: PublishResult,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct BroadcastResult {
pub responses: Vec<PublishResponse>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct PresenceResult {
pub presence: HashMap<String, ClientInfo>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct PresenceStatsResult {
pub num_users: u32,
pub num_clients: u32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct HistoryResult {
pub publication: Vec<Publication>,
pub offset: u64,
pub epoch: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ChannelInfo {
pub num_clients: u32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ChannelsResult {
pub channels: HashMap<String, ChannelInfo>,
}