1use serde::Deserialize;
2
3#[derive(Deserialize, Debug, Clone)]
4#[serde(tag = "type")]
5pub enum ReceiveSegment {
6 #[serde(rename = "text")]
7 Text { data: TextData },
8
9 #[serde(rename = "face")]
10 Face { data: FaceData },
11
12 #[serde(rename = "image")]
13 Image { data: ImageData },
14
15 #[serde(rename = "record")]
16 Record { data: RecordData },
17
18 #[serde(rename = "video")]
19 Video { data: VideoData },
20
21 #[serde(rename = "at")]
22 At { data: AtData },
23
24 #[serde(rename = "rps")]
25 Rps { data: RpsData },
26
27 #[serde(rename = "dice")]
28 Dice { data: DiceData },
29
30 #[serde(rename = "shake")]
31 Shake { data: ShakeData },
32
33 #[serde(rename = "poke")]
34 Poke { data: PokeData },
35
36 #[serde(rename = "anonymous")]
37 Anonymous { data: AnonymousData },
38
39 #[serde(rename = "share")]
40 Share { data: ShareData },
41
42 #[serde(rename = "contact")]
43 Contact { data: ContactData },
44
45 #[serde(rename = "location")]
46 Location { data: LocationData },
47
48 #[serde(rename = "music")]
49 Music { data: MusicData },
50
51 #[serde(rename = "reply")]
52 Reply { data: ReplyData },
53
54 #[serde(rename = "forward")]
55 Forward { data: ForwardData },
56
57 #[serde(rename = "node")]
58 Node { data: NodeData },
59
60 #[serde(rename = "xml")]
61 Xml { data: XmlData },
62
63 #[serde(rename = "json")]
64 Json { data: JsonData },
65}
66
67#[derive(Deserialize, Debug, Clone)]
68pub struct TextData {
69 pub text: String,
70}
71
72#[derive(Deserialize, Debug, Clone)]
73pub struct FaceData {
74 pub id: String,
75}
76
77#[derive(Deserialize, Debug, Clone)]
78pub struct ImageData {
79 pub file: String,
80 #[serde(rename = "type")]
81 pub image_type: Option<String>,
82 pub url: String,
83}
84
85#[derive(Deserialize, Debug, Clone)]
86pub struct RecordData {
87 pub file: String,
88 pub magic: String,
89 pub url: String,
90}
91
92#[derive(Deserialize, Debug, Clone)]
93pub struct VideoData {
94 pub file: String,
95 pub url: String,
96}
97
98#[derive(Deserialize, Debug, Clone)]
99pub struct AtData {
100 pub qq: String,
101}
102
103#[derive(Deserialize, Debug, Clone)]
104pub struct RpsData {}
105
106#[derive(Deserialize, Debug, Clone)]
107pub struct DiceData {}
108
109#[derive(Deserialize, Debug, Clone)]
110pub struct ShakeData {}
111
112#[derive(Deserialize, Debug, Clone)]
113pub struct PokeData {
114 #[serde(rename = "type")]
115 pub poke_type: String,
116 pub id: String,
117 pub name: String,
118}
119
120#[derive(Deserialize, Debug, Clone)]
121pub struct AnonymousData {}
122
123#[derive(Deserialize, Debug, Clone)]
124pub struct ShareData {
125 pub url: String,
126 pub title: String,
127 pub content: String,
128 pub image: String,
129}
130
131#[derive(Deserialize, Debug, Clone)]
132pub struct ContactData {
133 #[serde(rename = "type")]
134 pub contact_type: String,
135 pub id: String,
136}
137
138#[derive(Deserialize, Debug, Clone)]
139pub struct LocationData {
140 pub lat: String,
141 pub lon: String,
142 pub title: String,
143 pub content: String,
144}
145
146#[derive(Deserialize, Debug, Clone)]
147pub struct MusicData {}
148
149#[derive(Deserialize, Debug, Clone)]
150pub struct ReplyData {
151 pub id: String,
152}
153
154#[derive(Deserialize, Debug, Clone)]
155pub struct ForwardData {
156 pub id: String,
157}
158
159#[derive(Deserialize, Debug, Clone)]
160pub struct NodeData {
161 pub user_id: String,
162 pub nickname: String,
163 pub content: Vec<ReceiveSegment>,
164}
165
166#[derive(Deserialize, Debug, Clone)]
167pub struct XmlData {
168 pub data: String,
169}
170
171#[derive(Deserialize, Debug, Clone)]
172pub struct JsonData {
173 pub data: String,
174}