twilight_model/user/
premium_type.rs

1use serde::{Deserialize, Serialize};
2
3/// Type of premium tier for a [`User`].
4///
5/// [`User`]: super::User
6#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
7#[non_exhaustive]
8#[serde(from = "u8", into = "u8")]
9pub enum PremiumType {
10    /// User doesn't have premium.
11    None,
12    /// User has Nitro Classic.
13    NitroClassic,
14    /// User has the standard Nitro.
15    Nitro,
16    /// User has Nitro Basic.
17    NitroBasic,
18    /// Variant value is unknown to the library.
19    Unknown(u8),
20}
21
22impl From<u8> for PremiumType {
23    fn from(value: u8) -> Self {
24        match value {
25            0 => Self::None,
26            1 => Self::NitroClassic,
27            2 => Self::Nitro,
28            3 => Self::NitroBasic,
29            unknown => PremiumType::Unknown(unknown),
30        }
31    }
32}
33
34impl From<PremiumType> for u8 {
35    fn from(value: PremiumType) -> Self {
36        match value {
37            PremiumType::None => 0,
38            PremiumType::NitroClassic => 1,
39            PremiumType::Nitro => 2,
40            PremiumType::NitroBasic => 3,
41            PremiumType::Unknown(unknown) => unknown,
42        }
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use super::PremiumType;
49    use serde::{Deserialize, Serialize};
50    use serde_test::Token;
51    use static_assertions::assert_impl_all;
52    use std::{fmt::Debug, hash::Hash};
53
54    assert_impl_all!(
55        PremiumType: Clone,
56        Copy,
57        Debug,
58        Deserialize<'static>,
59        Eq,
60        Hash,
61        PartialEq,
62        Send,
63        Serialize,
64        Sync
65    );
66
67    #[test]
68    fn variants() {
69        serde_test::assert_tokens(&PremiumType::None, &[Token::U8(0)]);
70        serde_test::assert_tokens(&PremiumType::NitroClassic, &[Token::U8(1)]);
71        serde_test::assert_tokens(&PremiumType::Nitro, &[Token::U8(2)]);
72        serde_test::assert_tokens(&PremiumType::NitroBasic, &[Token::U8(3)]);
73        serde_test::assert_tokens(&PremiumType::Unknown(42), &[Token::U8(42)]);
74    }
75}