1use crate::{impl_str_enum, utils::error::Error};
2use serde::Deserialize;
3use serde_json::Value;
4
5#[derive(Clone, Debug, Deserialize)]
6#[allow(non_snake_case)]
7pub struct ChatData {
8 #[serde(default)]
9 pub toId: String,
10 #[serde(default)]
11 pub preview: String,
12 #[serde(default)]
13 pub user_session: String,
14 #[serde(default)]
15 pub senderAvatar: String,
16 #[serde(default)]
17 pub markdown: String,
18 #[serde(default)]
19 pub receiverAvatar: String,
20 #[serde(default)]
21 pub oId: String,
22 #[serde(default)]
23 pub time: String,
24 #[serde(default)]
25 pub fromId: String,
26 #[serde(default)]
27 pub senderUserName: String,
28 #[serde(default)]
29 pub content: String,
30 #[serde(default)]
31 pub receiverUserName: String,
32}
33impl ChatData {
34 pub fn from_value(data: &Value) -> Result<Self, Error> {
35 serde_json::from_value(data.clone())
36 .map_err(|e| Error::Parse(format!("Failed to parse ChatData: {}", e)))
37 }
38}
39
40#[derive(Clone, Debug, Deserialize)]
41#[allow(non_snake_case)]
42pub struct ChatNotice {
43 pub command: String,
44 pub userId: String,
45 pub preview: String,
46 pub senderAvatar: String,
47 pub senderUserName: String,
48}
49
50impl ChatNotice {
51 pub fn from_value(data: &Value) -> Result<Self, Error> {
52 serde_json::from_value(data.clone())
53 .map_err(|e| Error::Parse(format!("Failed to parse ChatNotice: {}", e)))
54 }
55}
56
57#[derive(Clone, Debug, Deserialize)]
58pub struct ChatRevoke {
59 pub data: String,
60}
61
62impl ChatRevoke {
63 pub fn from_value(data: &Value) -> Result<Self, Error> {
64 serde_json::from_value(data.clone())
65 .map_err(|e| Error::Parse(format!("Failed to parse ChatRevoke: {}", e)))
66 }
67}
68
69pub enum ChatMsgType {
70 Notice,
71 Data,
72 Revoke,
73}
74
75impl_str_enum!(ChatMsgType {
76 Notice => "notice",
77 Data => "data",
78 Revoke => "revoke"
79});