use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct InstanceServer {
pub endpoint: String,
pub encrypt: bool,
pub protocol: String,
pub ping_interval: u64,
pub ping_timeout: u64,
}
#[derive(Debug, Deserialize, Clone)]
pub struct WsToken {
pub token: String,
#[serde(rename = "instanceServers")]
pub instance_servers: Vec<InstanceServer>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct WsMessage {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub id: String,
#[serde(rename = "type")]
pub msg_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none", rename = "privateChannel")]
pub private_channel: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response: Option<bool>,
}
impl WsMessage {
pub fn ping() -> Self {
Self {
id: uuid::Uuid::new_v4().to_string(),
msg_type: "ping".to_string(),
topic: None,
subject: None,
data: None,
private_channel: None,
response: None,
}
}
#[inline]
pub const fn ping_json() -> &'static str {
r#"{"type":"ping"}"#
}
}