// Copyright 2019-2024 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT use serde::Deserialize; use std::path::PathBuf; use tauri::{ plugin::{Builder, TauriPlugin}, Manager, Runtime, }; pub use models::*; #[cfg(desktop)] mod desktop; #[cfg(mobile)] mod mobile; mod error; mod models; #[cfg(desktop)] use desktop::Sample; #[cfg(mobile)] use mobile::Sample; pub use error::*; /// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the sample APIs. pub trait SampleExt { fn sample(&self) -> &Sample; } impl> crate::SampleExt for T { fn sample(&self) -> &Sample { self.state::>().inner() } } #[allow(dead_code)] #[derive(Debug, Deserialize)] struct PingScope { path: PathBuf, } #[allow(dead_code)] #[derive(Debug, Deserialize)] struct SampleScope { path: PathBuf, } #[tauri::command] fn ping( app: tauri::AppHandle, value: Option, scope: tauri::ipc::CommandScope, global_scope: tauri::ipc::GlobalScope, ) -> std::result::Result { println!("local scope {:?}", scope); println!("global scope {:?}", global_scope); app .sample() .ping(PingRequest { value, on_event: tauri::ipc::Channel::new(|_| Ok(())), }) .map_err(|e| e.to_string()) } pub fn init() -> TauriPlugin { Builder::new("sample") .setup(|app, api| { #[cfg(mobile)] let sample = mobile::init(app, api)?; #[cfg(desktop)] let sample = desktop::init(app, api)?; app.manage(sample); Ok(()) }) .invoke_handler(tauri::generate_handler![ping]) .on_navigation(|window, url| { println!("navigation {} {url}", window.label()); true }) .build() }