twilight_model/application/monetization/
entitlement_type.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 EntitlementType {
7 Purchase,
9 PremiumSubscription,
11 DeveloperGift,
13 TestModePurchase,
15 FreePurchase,
17 UserGift,
19 PremiumPurchase,
21 ApplicationSubscription,
23 Unknown(u8),
24}
25
26impl From<u8> for EntitlementType {
27 fn from(value: u8) -> Self {
28 match value {
29 1 => Self::Purchase,
30 2 => Self::PremiumSubscription,
31 3 => Self::DeveloperGift,
32 4 => Self::TestModePurchase,
33 5 => Self::FreePurchase,
34 6 => Self::UserGift,
35 7 => Self::PremiumPurchase,
36 8 => Self::ApplicationSubscription,
37 other => Self::Unknown(other),
38 }
39 }
40}
41
42impl From<EntitlementType> for u8 {
43 fn from(value: EntitlementType) -> Self {
44 match value {
45 EntitlementType::Purchase => 1,
46 EntitlementType::PremiumSubscription => 2,
47 EntitlementType::DeveloperGift => 3,
48 EntitlementType::TestModePurchase => 4,
49 EntitlementType::FreePurchase => 5,
50 EntitlementType::UserGift => 6,
51 EntitlementType::PremiumPurchase => 7,
52 EntitlementType::ApplicationSubscription => 8,
53 EntitlementType::Unknown(other) => other,
54 }
55 }
56}
57
58impl EntitlementType {
59 pub const fn name(self) -> &'static str {
60 match self {
61 Self::Purchase => "Purchase",
62 Self::PremiumSubscription => "PremiumSubscription",
63 Self::DeveloperGift => "DeveloperGift",
64 Self::TestModePurchase => "TestModePurchase",
65 Self::FreePurchase => "FreePurchase",
66 Self::UserGift => "UserGift",
67 Self::PremiumPurchase => "PremiumPurchase",
68 Self::ApplicationSubscription => "ApplicationSubscription",
69 Self::Unknown(_) => "Unknown",
70 }
71 }
72}
73
74#[cfg(test)]
75mod tests {
76 use super::EntitlementType;
77 use serde_test::Token;
78
79 #[test]
80 fn variants() {
81 serde_test::assert_tokens(&EntitlementType::Purchase, &[Token::U8(1)]);
82 serde_test::assert_tokens(&EntitlementType::PremiumSubscription, &[Token::U8(2)]);
83 serde_test::assert_tokens(&EntitlementType::DeveloperGift, &[Token::U8(3)]);
84 serde_test::assert_tokens(&EntitlementType::TestModePurchase, &[Token::U8(4)]);
85 serde_test::assert_tokens(&EntitlementType::FreePurchase, &[Token::U8(5)]);
86 serde_test::assert_tokens(&EntitlementType::UserGift, &[Token::U8(6)]);
87 serde_test::assert_tokens(&EntitlementType::PremiumPurchase, &[Token::U8(7)]);
88 serde_test::assert_tokens(&EntitlementType::ApplicationSubscription, &[Token::U8(8)]);
89 serde_test::assert_tokens(&EntitlementType::Unknown(99), &[Token::U8(99)]);
90 }
91
92 #[test]
93 fn names() {
94 assert_eq!(EntitlementType::Purchase.name(), "Purchase");
95 assert_eq!(
96 EntitlementType::PremiumSubscription.name(),
97 "PremiumSubscription"
98 );
99 assert_eq!(EntitlementType::DeveloperGift.name(), "DeveloperGift");
100 assert_eq!(EntitlementType::TestModePurchase.name(), "TestModePurchase");
101 assert_eq!(EntitlementType::FreePurchase.name(), "FreePurchase");
102 assert_eq!(EntitlementType::UserGift.name(), "UserGift");
103 assert_eq!(EntitlementType::PremiumPurchase.name(), "PremiumPurchase");
104 assert_eq!(
105 EntitlementType::ApplicationSubscription.name(),
106 "ApplicationSubscription"
107 );
108 assert_eq!(EntitlementType::Unknown(99).name(), "Unknown");
109 }
110}