tauri_plugin_device/
lib.rs

1use tauri::{
2  plugin::{Builder, TauriPlugin},
3  Manager, Runtime,
4};
5
6pub use models::*;
7
8#[cfg(desktop)]
9mod desktop;
10#[cfg(mobile)]
11mod mobile;
12
13mod commands;
14mod error;
15mod models;
16
17pub use error::{Error, Result};
18
19#[cfg(desktop)]
20use desktop::Device;
21#[cfg(mobile)]
22use mobile::Device;
23use crate::commands::get_id;
24
25/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the device APIs.
26pub trait DeviceExt<R: Runtime> {
27  fn device(&self) -> &Device<R>;
28}
29
30impl<R: Runtime, T: Manager<R>> crate::DeviceExt<R> for T {
31  fn device(&self) -> &Device<R> {
32    self.state::<Device<R>>().inner()
33  }
34}
35
36/// Initializes the plugin.
37pub fn init<R: Runtime>() -> TauriPlugin<R> {
38  Builder::new("device")
39    .invoke_handler(tauri::generate_handler![get_id])
40    .setup(|app, api| {
41      #[cfg(mobile)]
42      let device = mobile::init(app, api)?;
43      #[cfg(desktop)]
44      let device = desktop::init(app, api)?;
45      app.manage(device);
46      Ok(())
47    })
48    .build()
49}