tauri_plugin_iap/
models.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize, Serialize)]
4#[serde(rename_all = "camelCase")]
5pub struct InitializeRequest {}
6
7#[derive(Debug, Clone, Default, Deserialize, Serialize)]
8#[serde(rename_all = "camelCase")]
9pub struct InitializeResponse {
10    pub success: bool,
11}
12
13#[derive(Debug, Deserialize, Serialize)]
14#[serde(rename_all = "camelCase")]
15pub struct GetProductsRequest {
16    pub product_ids: Vec<String>,
17    #[serde(default = "default_product_type")]
18    pub product_type: String,
19}
20
21fn default_product_type() -> String {
22    "subs".to_string()
23}
24
25#[derive(Debug, Clone, Deserialize, Serialize)]
26#[serde(rename_all = "camelCase")]
27pub struct PricingPhase {
28    pub formatted_price: String,
29    pub price_currency_code: String,
30    pub price_amount_micros: i64,
31    pub billing_period: String,
32    pub billing_cycle_count: i32,
33    pub recurrence_mode: i32,
34}
35
36#[derive(Debug, Clone, Deserialize, Serialize)]
37#[serde(rename_all = "camelCase")]
38pub struct SubscriptionOffer {
39    pub offer_token: String,
40    pub base_plan_id: String,
41    pub offer_id: Option<String>,
42    pub pricing_phases: Vec<PricingPhase>,
43}
44
45#[derive(Debug, Clone, Deserialize, Serialize)]
46#[serde(rename_all = "camelCase")]
47pub struct Product {
48    pub product_id: String,
49    pub title: String,
50    pub description: String,
51    pub product_type: String,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub formatted_price: Option<String>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub price_currency_code: Option<String>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub price_amount_micros: Option<i64>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub subscription_offer_details: Option<Vec<SubscriptionOffer>>,
60}
61
62#[derive(Debug, Clone, Deserialize, Serialize)]
63#[serde(rename_all = "camelCase")]
64pub struct GetProductsResponse {
65    pub products: Vec<Product>,
66}
67
68#[derive(Debug, Deserialize, Serialize)]
69#[serde(rename_all = "camelCase")]
70pub struct PurchaseRequest {
71    pub product_id: String,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub offer_token: Option<String>,
74}
75
76#[derive(Debug, Clone, Deserialize, Serialize)]
77#[serde(rename_all = "camelCase")]
78pub struct Purchase {
79    pub order_id: Option<String>,
80    pub package_name: String,
81    pub product_id: String,
82    pub purchase_time: i64,
83    pub purchase_token: String,
84    pub purchase_state: i32,
85    pub is_auto_renewing: bool,
86    pub is_acknowledged: bool,
87    pub original_json: String,
88    pub signature: String,
89}
90
91#[derive(Debug, Clone, Deserialize, Serialize)]
92#[serde(rename_all = "camelCase")]
93pub struct RestorePurchasesResponse {
94    pub purchases: Vec<Purchase>,
95}
96
97#[derive(Debug, Clone, Deserialize, Serialize)]
98#[serde(rename_all = "camelCase")]
99pub struct PurchaseHistoryRecord {
100    pub product_id: String,
101    pub purchase_time: i64,
102    pub purchase_token: String,
103    pub quantity: i32,
104    pub original_json: String,
105    pub signature: String,
106}
107
108#[derive(Debug, Clone, Deserialize, Serialize)]
109#[serde(rename_all = "camelCase")]
110pub struct GetPurchaseHistoryResponse {
111    pub history: Vec<PurchaseHistoryRecord>,
112}
113
114#[derive(Debug, Deserialize, Serialize)]
115#[serde(rename_all = "camelCase")]
116pub struct AcknowledgePurchaseRequest {
117    pub purchase_token: String,
118}
119
120#[derive(Debug, Clone, Deserialize, Serialize)]
121#[serde(rename_all = "camelCase")]
122pub struct AcknowledgePurchaseResponse {
123    pub success: bool,
124}