Skip to main content

lockbook_server_lib/billing/
google_play_model.rs

1use 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}