twilight_model/application/monetization/
sku_type.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4#[serde(from = "u8", into = "u8")]
5pub enum SkuType {
6 Durable,
8 Consumable,
10 Subscription,
12 SubscriptionGroup,
16 Unknown(u8),
17}
18
19impl From<u8> for SkuType {
20 fn from(value: u8) -> Self {
21 match value {
22 2 => Self::Durable,
23 3 => Self::Consumable,
24 5 => SkuType::Subscription,
25 6 => SkuType::SubscriptionGroup,
26 other => SkuType::Unknown(other),
27 }
28 }
29}
30
31impl From<SkuType> for u8 {
32 fn from(value: SkuType) -> Self {
33 match value {
34 SkuType::Durable => 2,
35 SkuType::Consumable => 3,
36 SkuType::Subscription => 5,
37 SkuType::SubscriptionGroup => 6,
38 SkuType::Unknown(other) => other,
39 }
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::SkuType;
46 use serde_test::Token;
47 #[test]
48 fn sku_type() {
49 serde_test::assert_tokens(&SkuType::Durable, &[Token::U8(2)]);
50 serde_test::assert_tokens(&SkuType::Consumable, &[Token::U8(3)]);
51 serde_test::assert_tokens(&SkuType::Subscription, &[Token::U8(5)]);
52 serde_test::assert_tokens(&SkuType::SubscriptionGroup, &[Token::U8(6)]);
53 serde_test::assert_tokens(&SkuType::Unknown(u8::MAX), &[Token::U8(u8::MAX)]);
54 }
55}