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
26pub 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
37pub 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}