Updated protocol

This commit is contained in:
2025-09-13 11:45:44 +02:00
parent 0919ec30d3
commit 642fe6cfcb
7 changed files with 334 additions and 34 deletions
+63 -12
View File
@@ -1,27 +1,60 @@
use serde::{Deserialize, Serialize};
use tungstenite::Bytes;
/// Messages sent *from the client* (user’s app) to the server
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "params", rename_all = "snake_case")]
pub enum FromClient {
SendMessage(String),
pub enum ClientMessage {
/// Send a message to a channel
SendMessage {
channel_id: String,
contents: String,
},
/// Edit a message (if allowed)
EditMessage {
channel_id: String,
message_id: String,
new_contents: String,
},
/// Delete a message (if allowed)
DeleteMessage {
channel_id: String,
message_id: String,
},
}
/// Messages sent *from the server* to the client
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "params", rename_all = "snake_case")]
pub enum FromServer {}
pub enum ServerMessage {
/// Successful authentication
Authenticated { user_id: String },
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "params", rename_all = "snake_case")]
pub enum ToClient {
Message(data::Message),
/// Error responses
Error { message: String },
/// A new message in a channel
MessageCreate(data::Message),
/// A message was edited
MessageUpdate(data::Message),
/// A message was deleted
MessageDelete {
channel_id: String,
message_id: String,
},
/// Presence updates
PresenceUpdate { user_id: String, status: String },
/// Typing indicator
Typing { user_id: String, channel_id: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "params", rename_all = "snake_case")]
pub enum ToServer {}
/// WebSocket for client messages
/// WebSocket wrapper
#[derive(Debug, Clone)]
pub enum WsMessage<T: Serialize + for<'de> Deserialize<'de>> {
FromClient(T),
@@ -29,12 +62,30 @@ pub enum WsMessage<T: Serialize + for<'de> Deserialize<'de>> {
String(String),
}
/// Shared data structures
pub mod data {
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub id: String,
pub channel_id: u8,
pub from: String,
pub contents: String,
pub timestamp: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Channel {
pub id: usize,
pub name: String,
pub kind: ChannelKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ChannelKind {
Text,
Voice,
}
}