#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
use crate::{extern_functions::*, prelude::*};
use serde::{Deserialize, Serialize};
use serde_repr::*;
use typed_builder::TypedBuilder;
pub struct Admob {}
impl Admob {
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn initialize(options: impl Into<AdMobInitializationOptions>) -> Result<(), Error> {
run_value_unit(options, admob_initialize).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn tracking_authorization_status(
) -> Result<TrackingAuthorizationStatusInterface, Error> {
run_unit_value(admob_tracking_authorization_status).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
#[deprecated]
pub async fn request_tracking_authorization() -> Result<(), Error> {
run_unit_unit(admob_request_tracking_authorization).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn set_application_muted(
options: impl Into<ApplicationMutedOptions>,
) -> Result<(), Error> {
run_value_unit(options, admob_set_application_muted).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn set_application_volume(
options: impl Into<ApplicationVolumeOptions>,
) -> Result<(), Error> {
run_value_unit(options, admob_set_application_volume).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn show_banner(options: impl Into<BannerAdOptions>) -> Result<(), Error> {
run_value_unit(options, admob_show_banner).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn hide_banner() -> Result<(), Error> {
run_unit_unit(admob_hide_banner).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn resume_banner() -> Result<(), Error> {
run_unit_unit(admob_resume_banner).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_banner_ad_sized_changed_listener<F: Fn(AdMobBannerSize) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "bannerAdSizeChanged", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_banner_ad_loaded_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "bannerAdLoaded", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_banner_failed_to_load_listener<F: Fn(AdMobError) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "bannerAdFailedToLoad", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_banner_opened_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "bannerAdOpened", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_banner_closed_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "bannerAdClosed", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_banner_ad_impression_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "bannerAdImpression", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn request_consent_info(
options: impl Into<AdmobConsentRequestOptions>,
) -> Result<AdmobConsentInfo, Error> {
run_value_value(options, admob_request_consent_info).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn show_consent_form() -> Result<AdmobConsentInfo, Error> {
run_unit_value(admob_show_consent_form).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn reset_consent_info() -> Result<(), Error> {
run_unit_unit(admob_reset_consent_info).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn prepare_interstitial(options: impl Into<AdOptions>) -> Result<AdLoadInfo, Error> {
run_value_value(options, admob_prepare_interstitial).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn show_interstitial() -> Result<(), Error> {
run_unit_unit(admob_show_interstitial).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_interstitial_ad_loaded_listener<F: Fn(AdLoadInfo) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "interstitialAdLoaded", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_interstitial_failed_to_load_listener<F: Fn(AdMobError) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "interstitialAdFailedToLoad", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_interstitial_showed_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "interstitialAdShowed", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_interstitial_failed_to_show_listener<F: Fn(AdMobError) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "interstitialAdFailedToShow", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_interstitial_ad_dismissed_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "interstitialAdDismissed", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn prepare_reward_video_ad(
options: impl Into<RewardAdOptions>,
) -> Result<AdLoadInfo, Error> {
run_value_value(options, admob_prepare_reward_video_ad).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn show_reward_video_ad() -> Result<AdMobRewardItem, Error> {
run_unit_value(admob_show_reward_video_ad).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_reward_failed_to_load_listener<F: Fn(AdMobError) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "onRewardedVideoAdFailedToLoad", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_reward_ad_loaded_listener<F: Fn(AdLoadInfo) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "onRewardedVideoAdLoaded", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_reward_ad_rewarded_listener<F: Fn(AdMobRewardItem) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "onRewardedVideoAdReward", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_reward_ad_dismissed_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "onRewardedVideoAdDismissed", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_reward_ad_failed_to_show_listener<F: Fn(AdMobError) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "onRewardedVideoAdFailedToShow", admob_add_listener).await
}
#[cfg(all(feature = "admob_plugin", any(feature = "ios", feature = "android")))]
pub async fn add_reward_showed_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "onRewardedVideoAdShowed", admob_add_listener).await
}
}
#[derive(Clone, Debug, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct AdMobInitializationOptions {
#[builder(setter(into))]
#[serde(rename = "testingDevices")]
pub testing_devices: Vec<String>,
#[builder(setter(into))]
#[serde(rename = "initializeForTesting")]
pub initialize_for_testing: bool,
#[builder(setter(into))]
#[serde(rename = "tagForChildDirectedTreatment")]
pub tag_for_child_directed_treatment: bool,
#[builder(setter(into))]
#[serde(rename = "tagForUnderAgeOfConsent")]
pub tag_for_under_age_of_consent: bool,
#[builder(setter(into))]
#[serde(rename = "maxAdContentRating")]
pub max_ad_content_rating: MaxAdContentRating,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum MaxAdContentRating {
General,
ParentalGuidance,
Teen,
MatureAudience,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TrackingAuthorizationStatusInterface {
pub status: TrackingAuthorizationStatus,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum TrackingAuthorizationStatus {
Authorized,
Denied,
NotDetermined,
Restricted,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ApplicationMutedOptions {
pub muted: bool,
}
impl From<bool> for ApplicationMutedOptions {
fn from(value: bool) -> Self {
Self { muted: value }
}
}
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ApplicationVolumeOptions {
pub volume: f32,
}
impl From<f32> for ApplicationVolumeOptions {
fn from(value: f32) -> Self {
Self {
volume: value.clamp(0.0, 1.0),
}
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdMobBannerSize {
pub width: f32,
pub height: f32,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdMobError {
pub code: u32,
pub message: String,
}
impl std::fmt::Display for AdMobError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.message)
}
}
impl std::error::Error for AdMobError {}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct AdmobConsentInfo {
pub status: AdmobConsentStatus,
#[serde(default)]
pub is_consent_form_available: bool,
}
#[derive(Clone, Debug, PartialEq, Serialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct AdmobConsentRequestOptions {
pub debug_geography: AdmobConsentDebugGeography,
pub test_device_identifiers: Vec<String>,
pub tag_for_under_age_of_consent: bool,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct AdLoadInfo {
pub ad_unit_id: String,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct AdOptions {
pub ad_id: String,
pub is_testing: bool,
pub margin: f32,
pub npa: bool,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
pub struct AdMobRewardItem {
#[serde(rename = "type")]
pub reward_type: String,
#[serde(rename = "amount")]
pub amount: u32,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum AdmobConsentStatus {
NotRequired,
Obtained,
Required,
Unknown,
}
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug, Clone, Copy)]
#[repr(u8)]
pub enum AdmobConsentDebugGeography {
Disabled = 0,
EEA = 1,
NotEea = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum InterstitialAdPluginEvents {
#[serde(rename = "interstitialAdLoaded")]
Loaded,
#[serde(rename = "interstitialAdFailedToLoad")]
FailedToLoad,
#[serde(rename = "interstitialAdShowed")]
Showed,
#[serde(rename = "interstitialAdFailedToShow")]
FailedToShow,
#[serde(rename = "interstitialAdDismissed")]
Dismissed,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum RewardAdPluginEvents {
#[serde(rename = "onRewardedVideoAdLoaded")]
Loaded,
#[serde(rename = "onRewardedVideoAdFailedToLoad")]
FailedToLoad,
#[serde(rename = "onRewardedVideoAdShowed")]
Showed,
#[serde(rename = "onRewardedVideoAdFailedToShow")]
FailedToShow,
#[serde(rename = "onRewardedVideoAdDismissed")]
Dismissed,
#[serde(rename = "onRewardedVideoAdReward")]
Rewarded,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum BannerAdSize {
Banner,
FullBanner,
LargeBanner,
MediumRectangle,
Leaderboard,
AdaptiveBanner,
SmartBanner,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum BannerAdPosition {
TopCenter,
Center,
BottomCenter,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum BannerAdPluginEvents {
SizeChanged,
Loaded,
FailedToLoad,
Opened,
Closed,
AdImpression,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct RewardAdSSV {
pub user_id: Option<String>,
pub custom_data: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct RewardAdOptions {
pub ssv: Option<RewardAdSSV>,
pub ad_id: String,
pub is_testing: bool,
pub margin: f32,
pub npa: bool,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct BannerAdOptions {
pub ad_size: BannerAdSize,
pub position: BannerAdPosition,
pub ad_id: String,
pub is_testing: bool,
pub margin: f32,
pub npa: bool,
}