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")]
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}