twilight_model/application/monetization/
sku.rs1use serde::{Deserialize, Serialize};
2
3use crate::id::{
4 marker::{ApplicationMarker, SkuMarker},
5 Id,
6};
7
8use super::{SkuFlags, SkuType};
9
10#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
12pub struct Sku {
13 application_id: Id<ApplicationMarker>,
15 flags: SkuFlags,
17 id: Id<SkuMarker>,
19 #[serde(rename = "type")]
21 kind: SkuType,
22 name: String,
24 slug: String,
26}
27
28#[cfg(test)]
29mod tests {
30 use serde_test::Token;
31
32 use crate::{
33 application::monetization::{SkuFlags, SkuType},
34 id::Id,
35 };
36
37 use super::Sku;
38
39 #[test]
40 fn sku() {
41 let value = Sku {
42 application_id: Id::new(1),
43 flags: SkuFlags::GUILD_SUBSCRIPTION,
44 id: Id::new(2),
45 kind: SkuType::Subscription,
46 name: "a name".to_owned(),
47 slug: "a-slug".to_owned(),
48 };
49
50 serde_test::assert_tokens(
51 &value,
52 &[
53 Token::Struct {
54 name: "Sku",
55 len: 6,
56 },
57 Token::Str("application_id"),
58 Token::NewtypeStruct { name: "Id" },
59 Token::Str("1"),
60 Token::Str("flags"),
61 Token::U64(1 << 7),
62 Token::Str("id"),
63 Token::NewtypeStruct { name: "Id" },
64 Token::Str("2"),
65 Token::Str("type"),
66 Token::U8(5),
67 Token::Str("name"),
68 Token::Str("a name"),
69 Token::Str("slug"),
70 Token::Str("a-slug"),
71 Token::StructEnd,
72 ],
73 );
74 }
75}