tauri_plugin_ble/
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 device;
15mod error;
16mod models;
17
18pub use error::{Error, Result};
19
20use crate::commands::{add_device, ble_discover_list, connect, del_device, disconnect, init_device, ping, un_device};
21#[cfg(desktop)]
22use desktop::Ble;
23#[cfg(mobile)]
24use mobile::Ble;
25
26/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the ble APIs.
27pub trait BleExt<R: Runtime> {
28    fn ble(&self) -> &Ble<R>;
29}
30
31impl<R: Runtime, T: Manager<R>> crate::BleExt<R> for T {
32    fn ble(&self) -> &Ble<R> {
33        self.state::<Ble<R>>().inner()
34    }
35}
36
37/// Initializes the plugin.
38pub fn init<R: Runtime>() -> TauriPlugin<R> {
39    Builder::new("ble")
40        .invoke_handler(tauri::generate_handler![
41            ping,
42            init_device,
43            ble_discover_list,
44            add_device,
45            del_device,
46            connect,
47            disconnect,
48            un_device,
49        ])
50        .setup(|app, api| {
51            #[cfg(mobile)]
52            let ble = mobile::init(app, api)?;
53            #[cfg(desktop)]
54            let ble = desktop::init(app, api)?;
55            app.manage(ble);
56            Ok(())
57        })
58        .build()
59}