use chrono::{DateTime, Utc}; use jid::JID; use uuid::Uuid; #[derive(Debug, sqlx::FromRow, Clone)] pub struct Message { pub id: Uuid, // does not contain full user information #[sqlx(rename = "from_jid")] pub from: JID, pub timestamp: DateTime, // TODO: originally_from // TODO: message edits // TODO: message timestamp #[sqlx(flatten)] pub body: Body, } // TODO: user migrations // pub enum Migrated { // Jabber(User), // Outside, // } #[derive(Debug, sqlx::FromRow, Clone)] pub struct Body { // TODO: rich text, other contents, threads pub body: String, } #[derive(sqlx::FromRow, Debug, Clone)] pub struct Chat { pub correspondent: JID, // pub unread_messages: i32, // pub latest_message: Message, // when a new message is received, the chat should be updated, and the new message should be delivered too. // message history is not stored in chat, retreived separately. // pub message_history: Vec, } pub enum ChatUpdate {} impl Chat { pub fn new(correspondent: JID) -> Self { Self { correspondent } } pub fn correspondent(&self) -> &JID { &self.correspondent } } // TODO: group chats // pub enum Chat { // Direct(DirectChat), // Channel(Channel), // } // pub struct Channel {}