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