twilight_model/guild/
premium_tier.rs1use 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}