twilight_model/channel/message/
reaction_type.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4#[non_exhaustive]
5#[serde(from = "u8", into = "u8")]
6pub enum ReactionType {
8 Normal,
10 Burst,
12 Unknown(u8),
14}
15
16impl From<u8> for ReactionType {
17 fn from(value: u8) -> Self {
18 match value {
19 0 => Self::Normal,
20 1 => Self::Burst,
21 unknown => Self::Unknown(unknown),
22 }
23 }
24}
25
26impl From<ReactionType> for u8 {
27 fn from(value: ReactionType) -> Self {
28 match value {
29 ReactionType::Normal => 0,
30 ReactionType::Burst => 1,
31 ReactionType::Unknown(unknown) => unknown,
32 }
33 }
34}
35
36impl ReactionType {
37 pub const fn name(self) -> &'static str {
39 match self {
40 Self::Normal => "Normal",
41 Self::Burst => "Burst",
42 Self::Unknown(_) => "Unknown",
43 }
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use super::ReactionType;
50 use serde_test::Token;
51
52 #[test]
53 fn variants() {
54 serde_test::assert_tokens(&ReactionType::Normal, &[Token::U8(0)]);
55 serde_test::assert_tokens(&ReactionType::Burst, &[Token::U8(1)]);
56 serde_test::assert_tokens(&ReactionType::Unknown(255), &[Token::U8(255)]);
57 }
58
59 #[test]
60 fn names() {
61 assert_eq!(ReactionType::Normal.name(), "Normal");
62 assert_eq!(ReactionType::Burst.name(), "Burst");
63 assert_eq!(ReactionType::Unknown(255).name(), "Unknown");
64 }
65}