twilight_model/gateway/presence/
activity_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")]
6#[derive(Default)]
7pub enum ActivityType {
8 #[default]
9 Playing,
10 Streaming,
11 Listening,
12 Watching,
13 Custom,
14 Competing,
15 Unknown(u8),
16}
17
18impl From<u8> for ActivityType {
19 fn from(value: u8) -> Self {
20 match value {
21 0 => ActivityType::Playing,
22 1 => ActivityType::Streaming,
23 2 => ActivityType::Listening,
24 3 => ActivityType::Watching,
25 4 => ActivityType::Custom,
26 5 => ActivityType::Competing,
27 unknown => ActivityType::Unknown(unknown),
28 }
29 }
30}
31
32impl From<ActivityType> for u8 {
33 fn from(value: ActivityType) -> Self {
34 match value {
35 ActivityType::Playing => 0,
36 ActivityType::Streaming => 1,
37 ActivityType::Listening => 2,
38 ActivityType::Watching => 3,
39 ActivityType::Custom => 4,
40 ActivityType::Competing => 5,
41 ActivityType::Unknown(unknown) => unknown,
42 }
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::ActivityType;
49 use serde_test::Token;
50
51 #[test]
52 fn default() {
53 assert_eq!(ActivityType::Playing, ActivityType::default());
54 }
55
56 #[test]
57 fn variants() {
58 serde_test::assert_tokens(&ActivityType::Playing, &[Token::U8(0)]);
59 serde_test::assert_tokens(&ActivityType::Streaming, &[Token::U8(1)]);
60 serde_test::assert_tokens(&ActivityType::Listening, &[Token::U8(2)]);
61 serde_test::assert_tokens(&ActivityType::Watching, &[Token::U8(3)]);
62 serde_test::assert_tokens(&ActivityType::Custom, &[Token::U8(4)]);
63 serde_test::assert_tokens(&ActivityType::Competing, &[Token::U8(5)]);
64 serde_test::assert_tokens(&ActivityType::Unknown(99), &[Token::U8(99)]);
65 }
66}