1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
use serde::{Deserialize, Serialize};
#[allow(missing_docs)]
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
#[non_exhaustive]
#[serde(from = "u8", into = "u8")]
pub enum MessageType {
Regular,
RecipientAdd,
RecipientRemove,
Call,
ChannelNameChange,
ChannelIconChange,
ChannelMessagePinned,
UserJoin,
GuildBoost,
GuildBoostTier1,
GuildBoostTier2,
GuildBoostTier3,
ChannelFollowAdd,
GuildDiscoveryDisqualified,
GuildDiscoveryRequalified,
GuildDiscoveryGracePeriodInitialWarning,
GuildDiscoveryGracePeriodFinalWarning,
ThreadCreated,
Reply,
ChatInputCommand,
ThreadStarterMessage,
GuildInviteReminder,
ContextMenuCommand,
AutoModerationAction,
Unknown(u8),
}
impl From<u8> for MessageType {
fn from(value: u8) -> Self {
match value {
0 => Self::Regular,
1 => Self::RecipientAdd,
2 => Self::RecipientRemove,
3 => Self::Call,
4 => Self::ChannelNameChange,
5 => Self::ChannelIconChange,
6 => Self::ChannelMessagePinned,
7 => Self::UserJoin,
8 => Self::GuildBoost,
9 => Self::GuildBoostTier1,
10 => Self::GuildBoostTier2,
11 => Self::GuildBoostTier3,
12 => Self::ChannelFollowAdd,
14 => Self::GuildDiscoveryDisqualified,
15 => Self::GuildDiscoveryRequalified,
16 => Self::GuildDiscoveryGracePeriodInitialWarning,
17 => Self::GuildDiscoveryGracePeriodFinalWarning,
18 => Self::ThreadCreated,
19 => Self::Reply,
20 => Self::ChatInputCommand,
21 => Self::ThreadStarterMessage,
22 => Self::GuildInviteReminder,
23 => Self::ContextMenuCommand,
24 => Self::AutoModerationAction,
unknown => Self::Unknown(unknown),
}
}
}
impl From<MessageType> for u8 {
fn from(value: MessageType) -> Self {
match value {
MessageType::Regular => 0,
MessageType::RecipientAdd => 1,
MessageType::RecipientRemove => 2,
MessageType::Call => 3,
MessageType::ChannelNameChange => 4,
MessageType::ChannelIconChange => 5,
MessageType::ChannelMessagePinned => 6,
MessageType::UserJoin => 7,
MessageType::GuildBoost => 8,
MessageType::GuildBoostTier1 => 9,
MessageType::GuildBoostTier2 => 10,
MessageType::GuildBoostTier3 => 11,
MessageType::ChannelFollowAdd => 12,
MessageType::GuildDiscoveryDisqualified => 14,
MessageType::GuildDiscoveryRequalified => 15,
MessageType::GuildDiscoveryGracePeriodInitialWarning => 16,
MessageType::GuildDiscoveryGracePeriodFinalWarning => 17,
MessageType::ThreadCreated => 18,
MessageType::Reply => 19,
MessageType::ChatInputCommand => 20,
MessageType::ThreadStarterMessage => 21,
MessageType::GuildInviteReminder => 22,
MessageType::ContextMenuCommand => 23,
MessageType::AutoModerationAction => 24,
MessageType::Unknown(unknown) => unknown,
}
}
}
#[cfg(test)]
mod tests {
use super::MessageType;
use serde_test::Token;
#[test]
fn variants() {
serde_test::assert_tokens(&MessageType::Regular, &[Token::U8(0)]);
serde_test::assert_tokens(&MessageType::RecipientAdd, &[Token::U8(1)]);
serde_test::assert_tokens(&MessageType::RecipientRemove, &[Token::U8(2)]);
serde_test::assert_tokens(&MessageType::Call, &[Token::U8(3)]);
serde_test::assert_tokens(&MessageType::ChannelNameChange, &[Token::U8(4)]);
serde_test::assert_tokens(&MessageType::ChannelIconChange, &[Token::U8(5)]);
serde_test::assert_tokens(&MessageType::ChannelMessagePinned, &[Token::U8(6)]);
serde_test::assert_tokens(&MessageType::UserJoin, &[Token::U8(7)]);
serde_test::assert_tokens(&MessageType::GuildBoost, &[Token::U8(8)]);
serde_test::assert_tokens(&MessageType::GuildBoostTier1, &[Token::U8(9)]);
serde_test::assert_tokens(&MessageType::GuildBoostTier2, &[Token::U8(10)]);
serde_test::assert_tokens(&MessageType::GuildBoostTier3, &[Token::U8(11)]);
serde_test::assert_tokens(&MessageType::ChannelFollowAdd, &[Token::U8(12)]);
serde_test::assert_tokens(&MessageType::GuildDiscoveryDisqualified, &[Token::U8(14)]);
serde_test::assert_tokens(&MessageType::GuildDiscoveryRequalified, &[Token::U8(15)]);
serde_test::assert_tokens(
&MessageType::GuildDiscoveryGracePeriodInitialWarning,
&[Token::U8(16)],
);
serde_test::assert_tokens(
&MessageType::GuildDiscoveryGracePeriodFinalWarning,
&[Token::U8(17)],
);
serde_test::assert_tokens(&MessageType::ThreadCreated, &[Token::U8(18)]);
serde_test::assert_tokens(&MessageType::Reply, &[Token::U8(19)]);
serde_test::assert_tokens(&MessageType::ChatInputCommand, &[Token::U8(20)]);
serde_test::assert_tokens(&MessageType::ThreadStarterMessage, &[Token::U8(21)]);
serde_test::assert_tokens(&MessageType::GuildInviteReminder, &[Token::U8(22)]);
serde_test::assert_tokens(&MessageType::ContextMenuCommand, &[Token::U8(23)]);
serde_test::assert_tokens(&MessageType::AutoModerationAction, &[Token::U8(24)]);
serde_test::assert_tokens(&MessageType::Unknown(99), &[Token::U8(99)]);
}
#[test]
fn conversions() {
assert_eq!(MessageType::from(0), MessageType::Regular);
assert_eq!(MessageType::from(1), MessageType::RecipientAdd);
assert_eq!(MessageType::from(2), MessageType::RecipientRemove);
assert_eq!(MessageType::from(3), MessageType::Call);
assert_eq!(MessageType::from(4), MessageType::ChannelNameChange);
assert_eq!(MessageType::from(5), MessageType::ChannelIconChange);
assert_eq!(MessageType::from(6), MessageType::ChannelMessagePinned);
assert_eq!(MessageType::from(7), MessageType::UserJoin);
assert_eq!(MessageType::from(8), MessageType::GuildBoost);
assert_eq!(MessageType::from(9), MessageType::GuildBoostTier1);
assert_eq!(MessageType::from(10), MessageType::GuildBoostTier2);
assert_eq!(MessageType::from(11), MessageType::GuildBoostTier3);
assert_eq!(MessageType::from(12), MessageType::ChannelFollowAdd);
assert_eq!(
MessageType::from(14),
MessageType::GuildDiscoveryDisqualified
);
assert_eq!(
MessageType::from(15),
MessageType::GuildDiscoveryRequalified
);
assert_eq!(
MessageType::from(16),
MessageType::GuildDiscoveryGracePeriodInitialWarning
);
assert_eq!(
MessageType::from(17),
MessageType::GuildDiscoveryGracePeriodFinalWarning
);
assert_eq!(MessageType::from(18), MessageType::ThreadCreated);
assert_eq!(MessageType::from(19), MessageType::Reply);
assert_eq!(MessageType::from(20), MessageType::ChatInputCommand);
assert_eq!(MessageType::from(21), MessageType::ThreadStarterMessage);
assert_eq!(MessageType::from(22), MessageType::GuildInviteReminder);
assert_eq!(MessageType::from(23), MessageType::ContextMenuCommand);
assert_eq!(MessageType::from(24), MessageType::AutoModerationAction);
assert_eq!(MessageType::from(250), MessageType::Unknown(250));
}
}