tauri_plugin_machine_uid/
lib.rs1use tauri::{
2 Manager, Runtime,
3 plugin::{Builder, TauriPlugin},
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::MachineUid;
21#[cfg(mobile)]
22use mobile::MachineUid;
23
24const PLUGIN_NAME: &str = "machine-uid";
25
26pub trait MachineUidExt<R: Runtime> {
28 fn machine_uid(&self) -> &MachineUid<R>;
29 fn try_machine_uid(&self) -> Option<&MachineUid<R>>;
30}
31
32impl<R: Runtime, T: Manager<R>> crate::MachineUidExt<R> for T {
33 fn machine_uid(&self) -> &MachineUid<R> {
34 self.state::<MachineUid<R>>().inner()
35 }
36 fn try_machine_uid(&self) -> Option<&MachineUid<R>> {
37 self.try_state::<MachineUid<R>>().map(|s| s.inner())
38 }
39}
40
41
42fn builder<R: Runtime>() -> tauri_specta::Builder<R> {
43 tauri_specta::Builder::new()
44 .plugin_name(PLUGIN_NAME)
45 .commands(tauri_specta::collect_commands![
46 commands::get_machine_uid::<tauri::Wry>,
47 ])
48}
49
50pub fn init<R: Runtime>() -> TauriPlugin<R> {
52 let builder = builder();
53 Builder::new(PLUGIN_NAME)
54 .invoke_handler(builder.invoke_handler())
55 .setup(|app, api| {
56 #[cfg(mobile)]
57 let machine_uid = mobile::init(app, api)?;
58 #[cfg(desktop)]
59 let machine_uid = desktop::init(app, api)?;
60 app.manage(machine_uid);
61 Ok(())
62 })
63 .build()
64}
65
66#[cfg(test)]
67mod test {
68 use super::*;
69
70 #[test]
71 fn export_types() {
72 builder::<tauri::Wry>()
73 .export(
74 specta_typescript::Typescript::default()
75 .bigint(specta_typescript::BigIntExportBehavior::BigInt)
76 .formatter(specta_typescript::formatter::prettier)
77 .header("// @ts-nocheck"),
78 "./bindings.ts",
79 )
80 .expect("failed to export specta types");
81 }
82}