use serde::de::DeserializeOwned; use tauri::{ plugin::{PluginApi, PluginHandle}, AppHandle, Runtime, }; use crate::models::*; #[cfg(target_os = "android")] const PLUGIN_IDENTIFIER: &str = "com.plugin.vpnservice"; #[cfg(target_os = "ios")] tauri::ios_plugin_binding!(init_plugin_vpnservice); // initializes the Kotlin or Swift plugin classes pub fn init( _app: &AppHandle, api: PluginApi, ) -> crate::Result> { #[cfg(target_os = "android")] let handle = api.register_android_plugin(PLUGIN_IDENTIFIER, "VpnServicePlugin")?; #[cfg(target_os = "ios")] let handle = api.register_ios_plugin(init_plugin_vpnservice)?; Ok(Vpnservice(handle)) } /// Access to the vpnservice APIs. pub struct Vpnservice(PluginHandle); impl Vpnservice { pub fn ping(&self, payload: PingRequest) -> crate::Result { self.0 .run_mobile_plugin("ping", payload) .map_err(Into::into) } pub fn prepare_vpn(&self, payload: VoidRequest) -> crate::Result { self.0 .run_mobile_plugin("prepare_vpn", payload) .map_err(Into::into) } pub fn start_vpn(&self, payload: StartVpnRequest) -> crate::Result { self.0 .run_mobile_plugin("start_vpn", payload) .map_err(Into::into) } pub fn stop_vpn(&self, payload: VoidRequest) -> crate::Result { self.0 .run_mobile_plugin("stop_vpn", payload) .map_err(Into::into) } }