use crate::error::Error;
use crate::helpers::*;
use crate::{extern_functions::*, prelude::*};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
pub struct Browser;
impl Browser {
pub async fn open(options: impl Into<OpenOptions>) -> Result<(), Error> {
run_value_unit(options, browser_open).await
}
#[cfg(any(feature = "ios", feature = "web"))]
pub async fn close() -> Result<(), Error> {
run_unit_unit(browser_close).await
}
pub async fn remove_all_listeners() -> Result<(), Error> {
run_unit_unit(browser_remove_all_listeners).await
}
#[cfg(any(feature = "ios", feature = "android"))]
pub async fn add_browser_finished_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "browserFinished", browser_add_listener).await
}
#[cfg(any(feature = "ios", feature = "android"))]
pub async fn add_browser_page_loaded_listener<F: Fn(()) + 'static>(
func: F,
) -> Result<PluginListenerHandle, Error> {
listen_async(func, "browserPageLoaded", browser_add_listener).await
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct OpenOptions {
pub url: String,
pub window_name: Option<String>,
pub toolbar_color: Option<String>,
pub presentation_style: Option<PresentationStyle>,
pub width: Option<u32>,
pub height: Option<u32>,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum PresentationStyle {
Fullscreen,
Popover,
}