twilight_model/user/
premium_type.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
7#[non_exhaustive]
8#[serde(from = "u8", into = "u8")]
9pub enum PremiumType {
10 None,
12 NitroClassic,
14 Nitro,
16 NitroBasic,
18 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}