1use std::collections::HashMap;
2
3use serde::Deserialize;
4use serde_json::Value;
5
6#[derive(Deserialize, Debug, Clone)]
7pub struct GroupFile {
8 pub id: String,
9 pub name: String,
10 pub size: i64,
11 pub busid: i64,
12}
13
14#[derive(Deserialize, Debug, Clone)]
15pub struct GroupUpload {
16 pub group_id: i64,
17 pub user_id: i64,
18 pub file: GroupFile,
19}
20
21#[derive(Deserialize, Debug, Clone)]
22#[serde(rename_all = "snake_case")]
23pub enum GroupAdminSubType {
24 Set,
25 Unset,
26}
27
28#[derive(Deserialize, Debug, Clone)]
29pub struct GroupAdmin {
30 pub group_id: i64,
31 pub user_id: i64,
32 pub sub_type: GroupAdminSubType,
33}
34
35#[derive(Deserialize, Debug, Clone)]
36#[serde(rename_all = "snake_case")]
37pub enum GroupDecreaseSubType {
38 Leave,
39 Kick,
40 KickMe,
41}
42
43#[derive(Deserialize, Debug, Clone)]
44pub struct GroupDecrease {
45 pub group_id: i64,
46 pub user_id: i64,
47 pub operator_id: i64,
48 pub sub_type: GroupDecreaseSubType,
49}
50
51#[derive(Deserialize, Debug, Clone)]
52#[serde(rename_all = "snake_case")]
53pub enum GroupIncreaseSubType {
54 Approve,
55 Invite,
56}
57
58#[derive(Deserialize, Debug, Clone)]
59pub struct GroupIncrease {
60 pub group_id: i64,
61 pub user_id: i64,
62 pub operator_id: i64,
63 pub sub_type: GroupIncreaseSubType,
64}
65
66#[derive(Deserialize, Debug, Clone)]
67#[serde(rename_all = "snake_case")]
68pub enum GroupBanSubType {
69 Ban,
70 LiftBan,
71}
72
73#[derive(Deserialize, Debug, Clone)]
74pub struct GroupBan {
75 pub group_id: i64,
76 pub user_id: i64,
77 pub operator_id: i64,
78 pub sub_type: GroupBanSubType,
79 pub duration: i64,
80}
81
82#[derive(Deserialize, Debug, Clone)]
83pub struct FriendAdd {
84 pub user_id: i64,
85}
86
87#[derive(Deserialize, Debug, Clone)]
88pub struct GroupRecall {
89 pub group_id: i64,
90 pub user_id: i64,
91 pub operator_id: i64,
92 pub message_id: i64,
93}
94
95#[derive(Deserialize, Debug, Clone)]
96pub struct FriendRecall {
97 pub user_id: i64,
98 pub message_id: i64,
99}
100
101#[derive(Deserialize, Debug, Clone)]
102#[serde(tag = "notice_type")]
103#[serde(rename_all = "snake_case")]
104pub enum Notice {
105 GroupUpload(GroupUpload),
106 GroupAdmin(GroupAdmin),
107 GroupDecrease(GroupDecrease),
108 GroupIncrease(GroupIncrease),
109 GroupBan(GroupBan),
110 FriendAdd(FriendAdd),
111 GroupRecall(GroupRecall),
112 FriendRecall(FriendRecall),
113 Notify {
114 #[serde(flatten)]
115 data: HashMap<String, Value>,
116 },
117}