twilight_model/guild/
premium_tier.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 PremiumTier {
7    None,
8    Tier1,
9    Tier2,
10    Tier3,
11    Other(u8),
12}
13
14impl From<u8> for PremiumTier {
15    fn from(value: u8) -> Self {
16        match value {
17            0 => PremiumTier::None,
18            1 => PremiumTier::Tier1,
19            2 => PremiumTier::Tier2,
20            3 => PremiumTier::Tier3,
21            other => PremiumTier::Other(other),
22        }
23    }
24}
25
26impl From<PremiumTier> for u8 {
27    fn from(value: PremiumTier) -> Self {
28        match value {
29            PremiumTier::None => 0,
30            PremiumTier::Tier1 => 1,
31            PremiumTier::Tier2 => 2,
32            PremiumTier::Tier3 => 3,
33            PremiumTier::Other(other) => other,
34        }
35    }
36}
37
38impl Default for PremiumTier {
39    fn default() -> Self {
40        Self::None
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::PremiumTier;
47    use serde_test::Token;
48
49    #[test]
50    fn variants() {
51        serde_test::assert_tokens(&PremiumTier::None, &[Token::U8(0)]);
52        serde_test::assert_tokens(&PremiumTier::Tier1, &[Token::U8(1)]);
53        serde_test::assert_tokens(&PremiumTier::Tier2, &[Token::U8(2)]);
54        serde_test::assert_tokens(&PremiumTier::Tier3, &[Token::U8(3)]);
55        serde_test::assert_tokens(&PremiumTier::Other(99), &[Token::U8(99)]);
56    }
57}