twilight_model/gateway/presence/
activity_type.rs

1use 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}