lockbook_server_lib/billing/
google_play_model.rs1use serde::Deserialize;
2
3#[derive(Debug, Deserialize)]
4pub struct PubSubNotification {
5 pub message: PubSubMessage,
6}
7
8#[derive(Debug, Deserialize)]
9pub struct PubSubMessage {
10 pub data: String,
11}
12
13#[derive(Debug, Deserialize)]
14#[serde(rename_all = "camelCase")]
15pub struct DeveloperNotification {
16 pub version: String,
17 pub one_time_product_notification: Option<OneTimeProductNotification>,
18 pub subscription_notification: Option<SubscriptionNotification>,
19 pub test_notification: Option<TestNotification>,
20}
21
22#[derive(Debug, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct SubscriptionNotification {
25 pub version: String,
26 pub notification_type: u32,
27 pub purchase_token: String,
28 pub subscription_id: String,
29}
30
31#[derive(Debug)]
32pub enum NotificationType {
33 SubscriptionRecovered,
34 SubscriptionRenewed,
35 SubscriptionCanceled,
36 SubscriptionPurchased,
37 SubscriptionOnHold,
38 SubscriptionInGracePeriod,
39 SubscriptionRestarted,
40 SubscriptionPriceChangeConfirmed,
41 SubscriptionDeferred,
42 SubscriptionPaused,
43 SubscriptionPausedScheduleChanged,
44 SubscriptionRevoked,
45 SubscriptionExpired,
46 Unknown,
47}
48
49impl SubscriptionNotification {
50 pub fn notification_type(&self) -> NotificationType {
51 match self.notification_type {
52 1 => NotificationType::SubscriptionRecovered,
53 2 => NotificationType::SubscriptionRenewed,
54 3 => NotificationType::SubscriptionCanceled,
55 4 => NotificationType::SubscriptionPurchased,
56 5 => NotificationType::SubscriptionOnHold,
57 6 => NotificationType::SubscriptionInGracePeriod,
58 7 => NotificationType::SubscriptionRestarted,
59 8 => NotificationType::SubscriptionPriceChangeConfirmed,
60 9 => NotificationType::SubscriptionDeferred,
61 10 => NotificationType::SubscriptionPaused,
62 11 => NotificationType::SubscriptionPausedScheduleChanged,
63 12 => NotificationType::SubscriptionRevoked,
64 13 => NotificationType::SubscriptionExpired,
65 _ => NotificationType::Unknown,
66 }
67 }
68}
69
70#[derive(Debug, Deserialize)]
71#[serde(rename_all = "camelCase")]
72pub struct OneTimeProductNotification {
73 pub version: String,
74 pub notification_type: u32,
75 pub purchase_token: String,
76 pub sku: String,
77}
78
79#[derive(Debug, Deserialize)]
80pub struct TestNotification {
81 pub version: String,
82}