use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum ChatMessage {
DirectMessage {
from: i32,
to: i32,
content: String,
message_id: uuid::Uuid,
},
Presence {
user: i32,
status: PresenceStatus,
},
MessageAck {
message_id: uuid::Uuid,
timestamp: i64,
status: MessageStatus,
},
GetPaginatedMessages {
message_id: Option<uuid::Uuid>,
conversation_id: String,
},
ChatHistoryResponse {
messages: Vec<ResponseDirectMessage>,
has_more: bool,
next_cursor: Option<uuid::Uuid>,
},
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum MessageStatus {
Delivered,
Persisted,
Failed(String),
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MessageAckResponse {
pub message_id: uuid::Uuid,
pub timestamp: i64,
pub status: MessageStatus,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum PresenceStatus {
Online,
Offline,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ResponseDirectMessage {
pub conversation_id: String,
pub message_id: Uuid,
pub sender_id: i32,
pub recipient_id: i32,
pub message_text: String,
pub created_at: i64,
}