use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ClientMsg {
Hello {
fingerprint: String,
#[serde(default)]
pubkey_b64: String,
#[serde(default)]
signature_b64: String,
#[serde(default)]
rooms: Vec<String>,
#[serde(default)]
acks: bool,
},
Subscribe {
room: String,
},
Unsubscribe {
room: String,
},
Publish {
room: String,
id: String,
payload_b64: String,
},
SendDirect {
to: String,
room: String,
id: String,
payload_b64: String,
},
CreateConnectToken,
RedeemConnectToken {
token: String,
},
Fetch,
Ack {
mailbox_id: i64,
},
Ping,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ServerMsg {
Challenge {
nonce_b64: String,
},
Ready {
fingerprint: String,
},
Message {
room: String,
id: String,
payload_b64: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
mailbox_id: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
seq: Option<i64>,
},
Sent {
id: String,
delivered: usize,
queued: usize,
},
ConnectToken {
token: String,
ttl_secs: u64,
},
ConnectTokenResolved {
token: String,
#[serde(default)]
fingerprint: Option<String>,
#[serde(default)]
pubkey_b64: Option<String>,
},
Pong,
Error {
message: String,
},
}