twilight_model/channel/message/
reference_type.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, Hash, PartialEq, Serialize)]
5#[non_exhaustive]
6#[serde(from = "u8", into = "u8")]
7pub enum MessageReferenceType {
8 #[default]
10 Default,
11 Forward,
13 Unknown(u8),
15}
16
17impl From<u8> for MessageReferenceType {
18 fn from(value: u8) -> Self {
19 match value {
20 0 => MessageReferenceType::Default,
21 1 => MessageReferenceType::Forward,
22 other => MessageReferenceType::Unknown(other),
23 }
24 }
25}
26
27impl From<MessageReferenceType> for u8 {
28 fn from(value: MessageReferenceType) -> Self {
29 match value {
30 MessageReferenceType::Default => 0,
31 MessageReferenceType::Forward => 1,
32 MessageReferenceType::Unknown(other) => other,
33 }
34 }
35}
36
37impl MessageReferenceType {
38 pub const fn name(&self) -> &str {
40 match self {
41 Self::Default => "Default",
42 Self::Forward => "Forward",
43 Self::Unknown(_) => "Unknown",
44 }
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::MessageReferenceType;
51 use serde::{Deserialize, Serialize};
52 use serde_test::Token;
53 use static_assertions::assert_impl_all;
54 use std::{fmt::Debug, hash::Hash};
55
56 assert_impl_all!(
57 MessageReferenceType: Clone,
58 Copy,
59 Debug,
60 Deserialize<'static>,
61 Eq,
62 Hash,
63 PartialEq,
64 Serialize,
65 Send,
66 Sync,
67 );
68
69 #[test]
70 fn variants() {
71 serde_test::assert_tokens(&MessageReferenceType::Default, &[Token::U8(0)]);
72 serde_test::assert_tokens(&MessageReferenceType::Forward, &[Token::U8(1)]);
73 serde_test::assert_tokens(&MessageReferenceType::Unknown(99), &[Token::U8(99)]);
74 }
75
76 #[test]
77 fn names() {
78 assert_eq!(MessageReferenceType::Default.name(), "Default");
79 assert_eq!(MessageReferenceType::Forward.name(), "Forward");
80 assert_eq!(MessageReferenceType::Unknown(99).name(), "Unknown");
81 }
82
83 #[test]
84 fn default() {
85 assert_eq!(
86 MessageReferenceType::Default,
87 MessageReferenceType::default()
88 );
89 }
90}