twilight_model/channel/message/
activity.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5pub struct MessageActivity {
6 #[serde(rename = "type")]
8 pub kind: MessageActivityType,
9 #[serde(skip_serializing_if = "Option::is_none")]
11 pub party_id: Option<String>,
12}
13
14#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
16#[non_exhaustive]
17#[serde(from = "u8", into = "u8")]
18pub enum MessageActivityType {
19 Join,
21 Spectate,
23 Listen,
25 JoinRequest,
27 Unknown(u8),
29}
30
31impl From<u8> for MessageActivityType {
32 fn from(value: u8) -> Self {
33 match value {
34 1 => Self::Join,
35 2 => Self::Spectate,
36 3 => Self::Listen,
37 5 => Self::JoinRequest,
38 unknown => Self::Unknown(unknown),
39 }
40 }
41}
42
43impl From<MessageActivityType> for u8 {
44 fn from(value: MessageActivityType) -> Self {
45 match value {
46 MessageActivityType::Join => 1,
47 MessageActivityType::Spectate => 2,
48 MessageActivityType::Listen => 3,
49 MessageActivityType::JoinRequest => 5,
50 MessageActivityType::Unknown(unknown) => unknown,
51 }
52 }
53}
54
55#[cfg(test)]
56mod tests {
57 use super::{MessageActivity, MessageActivityType};
58 use serde_test::Token;
59
60 #[test]
61 fn message_activity() {
62 let value = MessageActivity {
63 kind: MessageActivityType::Join,
64 party_id: None,
65 };
66
67 serde_test::assert_tokens(
68 &value,
69 &[
70 Token::Struct {
71 name: "MessageActivity",
72 len: 1,
73 },
74 Token::Str("type"),
75 Token::U8(1),
76 Token::StructEnd,
77 ],
78 );
79 }
80
81 #[test]
82 fn message_activity_complete() {
83 let value = MessageActivity {
84 kind: MessageActivityType::Join,
85 party_id: Some("test".to_owned()),
86 };
87
88 serde_test::assert_tokens(
89 &value,
90 &[
91 Token::Struct {
92 name: "MessageActivity",
93 len: 2,
94 },
95 Token::Str("type"),
96 Token::U8(1),
97 Token::Str("party_id"),
98 Token::Some,
99 Token::Str("test"),
100 Token::StructEnd,
101 ],
102 );
103 }
104
105 #[test]
106 fn variants() {
107 serde_test::assert_tokens(&MessageActivityType::Join, &[Token::U8(1)]);
108 serde_test::assert_tokens(&MessageActivityType::Spectate, &[Token::U8(2)]);
109 serde_test::assert_tokens(&MessageActivityType::Listen, &[Token::U8(3)]);
110 serde_test::assert_tokens(&MessageActivityType::JoinRequest, &[Token::U8(5)]);
111 serde_test::assert_tokens(&MessageActivityType::Unknown(99), &[Token::U8(99)]);
112 }
113}