Private
Public Access
1
0

client: implements event/updates websocket

This commit is contained in:
2025-05-01 18:07:18 -07:00
parent 13a78ccd47
commit f6ac3b5a58
14 changed files with 561 additions and 67 deletions

View File

@@ -0,0 +1,17 @@
use crate::model::{Conversation, Message, UpdateItem};
#[derive(Debug, Clone)]
pub enum Event {
ConversationChanged(Conversation),
MessageReceived(Conversation, Message),
}
impl From<UpdateItem> for Event {
fn from(update: UpdateItem) -> Self {
match update {
UpdateItem { conversation: Some(conversation), message: None, .. } => Event::ConversationChanged(conversation),
UpdateItem { conversation: Some(conversation), message: Some(message), .. } => Event::MessageReceived(conversation, message),
_ => panic!("Invalid update item: {:?}", update),
}
}
}

View File

@@ -1,5 +1,7 @@
pub mod conversation;
pub mod event;
pub mod message;
pub mod update;
pub use conversation::Conversation;
pub use conversation::ConversationID;
@@ -7,6 +9,10 @@ pub use conversation::ConversationID;
pub use message::Message;
pub use message::MessageID;
pub use update::UpdateItem;
pub use event::Event;
pub mod jwt;
pub use jwt::JwtToken;

View File

@@ -0,0 +1,21 @@
use serde::Deserialize;
use super::conversation::Conversation;
use super::message::Message;
#[derive(Debug, Clone, Deserialize)]
pub struct UpdateItem {
#[serde(rename = "messageSequenceNumber")]
pub seq: u64,
#[serde(rename = "conversation")]
pub conversation: Option<Conversation>,
#[serde(rename = "message")]
pub message: Option<Message>,
}
impl Default for UpdateItem {
fn default() -> Self {
Self { seq: 0, conversation: None, message: None }
}
}