diff options
Diffstat (limited to 'filamento/src/chat.rs')
-rw-r--r-- | filamento/src/chat.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/filamento/src/chat.rs b/filamento/src/chat.rs new file mode 100644 index 0000000..c1194ea --- /dev/null +++ b/filamento/src/chat.rs @@ -0,0 +1,57 @@ +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<Utc>, + // 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<Message>, +} + +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 {} |