Skip to main content

tauri_plugin_google_admob/
models.rs

1use serde::{Deserialize, Serialize};
2
3// ============== Configuration ==============
4
5#[derive(Debug, Clone, Deserialize, Serialize)]
6#[serde(rename_all = "camelCase")]
7pub struct InitializeRequest {
8    #[serde(default)]
9    pub test_device_ids: Vec<String>,
10    #[serde(default)]
11    pub tag_for_child_directed_treatment: Option<bool>,
12    #[serde(default)]
13    pub tag_for_under_age_of_consent: Option<bool>,
14}
15
16#[derive(Debug, Clone, Default, Deserialize, Serialize)]
17#[serde(rename_all = "camelCase")]
18pub struct InitializeResponse {
19    pub initialized: bool,
20}
21
22// ============== Banner Ads ==============
23
24#[derive(Debug, Clone, Deserialize, Serialize)]
25#[serde(rename_all = "camelCase")]
26pub struct BannerAdOptions {
27    pub ad_unit_id: String,
28    #[serde(default = "default_banner_position")]
29    pub position: BannerPosition,
30    #[serde(default)]
31    pub ad_size: BannerSize,
32}
33
34fn default_banner_position() -> BannerPosition {
35    BannerPosition::Bottom
36}
37
38#[derive(Debug, Clone, Default, Deserialize, Serialize)]
39#[serde(rename_all = "lowercase")]
40pub enum BannerPosition {
41    Top,
42    #[default]
43    Bottom,
44}
45
46#[derive(Debug, Clone, Default, Deserialize, Serialize)]
47#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
48pub enum BannerSize {
49    #[default]
50    Banner,
51    LargeBanner,
52    MediumRectangle,
53    FullBanner,
54    Leaderboard,
55    Adaptive,
56}
57
58#[derive(Debug, Clone, Default, Deserialize, Serialize)]
59#[serde(rename_all = "camelCase")]
60pub struct ShowBannerResponse {
61    pub shown: bool,
62}
63
64#[derive(Debug, Clone, Default, Deserialize, Serialize)]
65#[serde(rename_all = "camelCase")]
66pub struct HideBannerResponse {
67    pub hidden: bool,
68}
69
70// ============== Interstitial Ads ==============
71
72#[derive(Debug, Clone, Deserialize, Serialize)]
73#[serde(rename_all = "camelCase")]
74pub struct InterstitialAdOptions {
75    pub ad_unit_id: String,
76}
77
78#[derive(Debug, Clone, Default, Deserialize, Serialize)]
79#[serde(rename_all = "camelCase")]
80pub struct PrepareInterstitialResponse {
81    pub loaded: bool,
82}
83
84#[derive(Debug, Clone, Default, Deserialize, Serialize)]
85#[serde(rename_all = "camelCase")]
86pub struct ShowInterstitialResponse {
87    pub shown: bool,
88}
89
90// ============== Rewarded Ads ==============
91
92#[derive(Debug, Clone, Deserialize, Serialize)]
93#[serde(rename_all = "camelCase")]
94pub struct RewardedAdOptions {
95    pub ad_unit_id: String,
96}
97
98#[derive(Debug, Clone, Default, Deserialize, Serialize)]
99#[serde(rename_all = "camelCase")]
100pub struct PrepareRewardedResponse {
101    pub loaded: bool,
102}
103
104#[derive(Debug, Clone, Default, Deserialize, Serialize)]
105#[serde(rename_all = "camelCase")]
106pub struct ShowRewardedResponse {
107    pub shown: bool,
108    pub reward: Option<AdReward>,
109}
110
111#[derive(Debug, Clone, Default, Deserialize, Serialize)]
112#[serde(rename_all = "camelCase")]
113pub struct AdReward {
114    pub reward_type: String,
115    pub amount: i32,
116}
117
118// ============== Rewarded Interstitial Ads ==============
119
120#[derive(Debug, Clone, Deserialize, Serialize)]
121#[serde(rename_all = "camelCase")]
122pub struct RewardedInterstitialAdOptions {
123    pub ad_unit_id: String,
124}
125
126#[derive(Debug, Clone, Default, Deserialize, Serialize)]
127#[serde(rename_all = "camelCase")]
128pub struct PrepareRewardedInterstitialResponse {
129    pub loaded: bool,
130}
131
132#[derive(Debug, Clone, Default, Deserialize, Serialize)]
133#[serde(rename_all = "camelCase")]
134pub struct ShowRewardedInterstitialResponse {
135    pub shown: bool,
136    pub reward: Option<AdReward>,
137}
138
139// ============== App Open Ads ==============
140
141#[derive(Debug, Clone, Deserialize, Serialize)]
142#[serde(rename_all = "camelCase")]
143pub struct AppOpenAdOptions {
144    pub ad_unit_id: String,
145}
146
147#[derive(Debug, Clone, Default, Deserialize, Serialize)]
148#[serde(rename_all = "camelCase")]
149pub struct PrepareAppOpenResponse {
150    pub loaded: bool,
151}
152
153#[derive(Debug, Clone, Default, Deserialize, Serialize)]
154#[serde(rename_all = "camelCase")]
155pub struct ShowAppOpenResponse {
156    pub shown: bool,
157}
158
159// ============== Ad Events ==============
160
161#[derive(Debug, Clone, Deserialize, Serialize)]
162#[serde(rename_all = "camelCase")]
163pub struct AdEvent {
164    pub ad_type: AdType,
165    pub event: AdEventType,
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub error: Option<String>,
168    #[serde(skip_serializing_if = "Option::is_none")]
169    pub reward: Option<AdReward>,
170}
171
172#[derive(Debug, Clone, Deserialize, Serialize)]
173#[serde(rename_all = "camelCase")]
174pub enum AdType {
175    Banner,
176    Interstitial,
177    Rewarded,
178    RewardedInterstitial,
179    AppOpen,
180}
181
182#[derive(Debug, Clone, Deserialize, Serialize)]
183#[serde(rename_all = "camelCase")]
184pub enum AdEventType {
185    Loaded,
186    FailedToLoad,
187    Opened,
188    Closed,
189    Clicked,
190    Impression,
191    FailedToShow,
192    Reward,
193}
194
195// ============== Legacy (keeping for compatibility) ==============
196
197#[derive(Debug, Deserialize, Serialize)]
198#[serde(rename_all = "camelCase")]
199pub struct PingRequest {
200    pub value: Option<String>,
201}
202
203#[derive(Debug, Clone, Default, Deserialize, Serialize)]
204#[serde(rename_all = "camelCase")]
205pub struct PingResponse {
206    pub value: Option<String>,
207}