Skip to main content

fishpi_sdk/model/
chat.rs

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});