Added chatmessage type for client
This commit is contained in:
parent
1ee28e57d4
commit
bbbbec7b85
76
src/client_types/chat_message.rs
Normal file
76
src/client_types/chat_message.rs
Normal file
@ -0,0 +1,76 @@
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Default)]
|
||||
pub struct TimeSensitiveAction {
|
||||
pub by: u32,
|
||||
pub time: i64,
|
||||
}
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Default)]
|
||||
pub enum MessageContentType {
|
||||
#[default]
|
||||
Text,
|
||||
Image,
|
||||
Audio,
|
||||
Video
|
||||
}
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Default)]
|
||||
pub struct ChatMessage {
|
||||
pub id: u32,
|
||||
/// User id
|
||||
#[serde(rename = "fromId")]
|
||||
pub from_id: u32,
|
||||
/// ChatRoom id (Not a user id)
|
||||
#[serde(rename = "toId")]
|
||||
pub to_id: u32,
|
||||
pub message: Vec<u8>,
|
||||
pub message_content: MessageContentType,
|
||||
/// This must always be there. Since its created.
|
||||
#[serde(rename = "timeSent")]
|
||||
pub time_sent: i64,
|
||||
/// This is a Vec because there can be many recipients.
|
||||
#[serde(rename = "timeDelivered")]
|
||||
pub time_delivered: Vec<TimeSensitiveAction>,
|
||||
/// This is a Vec because there can be many recipients.
|
||||
#[serde(rename = "timeSeen")]
|
||||
pub time_seen: Vec<TimeSensitiveAction>,
|
||||
}
|
||||
|
||||
impl From<crate::domain::chat_message::TimeSensitiveAction> for TimeSensitiveAction {
|
||||
fn from(value: crate::domain::chat_message::TimeSensitiveAction) -> Self {
|
||||
Self {
|
||||
by: value.by,
|
||||
time: value.time.timestamp_millis(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<crate::domain::chat_message::ChatMessageContent> for MessageContentType {
|
||||
fn from(value: crate::domain::chat_message::ChatMessageContent) -> Self {
|
||||
match value {
|
||||
crate::domain::chat_message::ChatMessageContent::Text(_) => MessageContentType::Text,
|
||||
crate::domain::chat_message::ChatMessageContent::Image(_) => MessageContentType::Image,
|
||||
crate::domain::chat_message::ChatMessageContent::Video(_) => MessageContentType::Video,
|
||||
crate::domain::chat_message::ChatMessageContent::Audio(_) => MessageContentType::Audio,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<crate::domain::chat_message::ChatMessage> for ChatMessage {
|
||||
fn from(value: crate::domain::chat_message::ChatMessage) -> Self {
|
||||
Self {
|
||||
id: value.id,
|
||||
from_id: value.from_id,
|
||||
to_id: value.to_id,
|
||||
message: match value.message.clone() {
|
||||
crate::domain::chat_message::ChatMessageContent::Text(text) => text.as_bytes().to_vec(),
|
||||
crate::domain::chat_message::ChatMessageContent::Image(bytes) => bytes,
|
||||
crate::domain::chat_message::ChatMessageContent::Video(bytes) => bytes,
|
||||
crate::domain::chat_message::ChatMessageContent::Audio(bytes) => bytes,
|
||||
},
|
||||
message_content: value.message.into(),
|
||||
time_sent: value.time_sent.timestamp_millis(),
|
||||
time_delivered: value.time_delivered.list.into_iter().map(|time_delivered| time_delivered.into()).collect(),
|
||||
time_seen: value.time_seen.list.into_iter().map(|time_seen| time_seen.into()).collect(),
|
||||
}
|
||||
}
|
||||
}
|
0
src/client_types/chat_room.rs
Normal file
0
src/client_types/chat_room.rs
Normal file
2
src/client_types/mod.rs
Normal file
2
src/client_types/mod.rs
Normal file
@ -0,0 +1,2 @@
|
||||
pub mod chat_message;
|
||||
pub mod chat_room;
|
@ -1,2 +1,3 @@
|
||||
pub mod domain;
|
||||
pub mod dto;
|
||||
pub mod dto;
|
||||
pub mod client_types;
|
Loading…
Reference in New Issue
Block a user