twilight_model/guild/invite/
invite_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")]
6pub enum InviteType {
7    Guild,
8    GroupDm,
9    Friend,
10    Unknown(u8),
11}
12
13impl From<u8> for InviteType {
14    fn from(value: u8) -> Self {
15        match value {
16            0 => Self::Guild,
17            1 => Self::GroupDm,
18            2 => Self::Friend,
19            unknown => Self::Unknown(unknown),
20        }
21    }
22}
23
24impl From<InviteType> for u8 {
25    fn from(value: InviteType) -> Self {
26        match value {
27            InviteType::Guild => 0,
28            InviteType::GroupDm => 1,
29            InviteType::Friend => 2,
30            InviteType::Unknown(unknown) => unknown,
31        }
32    }
33}
34
35impl InviteType {
36    pub const fn name(&self) -> &str {
37        match self {
38            Self::Guild => "Guild",
39            Self::GroupDm => "Group",
40            Self::Friend => "Friend",
41            Self::Unknown(_) => "Unknown",
42        }
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use super::InviteType;
49    use serde_test::Token;
50
51    #[test]
52    fn variants() {
53        serde_test::assert_tokens(&InviteType::Guild, &[Token::U8(0)]);
54        serde_test::assert_tokens(&InviteType::GroupDm, &[Token::U8(1)]);
55        serde_test::assert_tokens(&InviteType::Friend, &[Token::U8(2)]);
56        serde_test::assert_tokens(&InviteType::Unknown(99), &[Token::U8(99)]);
57    }
58
59    #[test]
60    fn names() {
61        assert_eq!(InviteType::Guild.name(), "Guild");
62        assert_eq!(InviteType::GroupDm.name(), "Group");
63        assert_eq!(InviteType::Friend.name(), "Friend");
64        assert_eq!(InviteType::Unknown(99).name(), "Unknown");
65    }
66}