tauri_plugin_device_info/lib.rs
1//! # Tauri Plugin: Device Info
2//!
3//! A comprehensive Tauri plugin for accessing device information across all platforms.
4//!
5//! ## Features
6//!
7//! - **Device Info**: UUID, manufacturer, model, serial number
8//! - **Battery Info**: Charge level, charging status, health
9//! - **Network Info**: IP address, network type, MAC address
10//! - **Storage Info**: Total/free space, storage type
11//! - **Display Info**: Resolution, scale factor, refresh rate
12//!
13//! ## Supported Platforms
14//!
15//! | Platform | Status |
16//! |----------|--------|
17//! | Windows | ✅ |
18//! | macOS | ✅ |
19//! | Linux | ✅ |
20//! | iOS | ✅ |
21//! | Android | ✅ |
22//!
23//! ## Usage
24//!
25//! ```rust,ignore
26//! // In your Tauri app's main.rs or lib.rs
27//! fn main() {
28//! tauri::Builder::default()
29//! .plugin(tauri_plugin_device_info::init())
30//! .run(tauri::generate_context!())
31//! .expect("error while running tauri application");
32//! }
33//! ```
34//!
35//! ## JavaScript/TypeScript API
36//!
37//! ```typescript
38//! import { getDeviceInfo, getBatteryInfo } from 'tauri-plugin-device-info-api';
39//!
40//! const device = await getDeviceInfo();
41//! const battery = await getBatteryInfo();
42//! ```
43
44use tauri::{
45 plugin::{Builder, TauriPlugin},
46 Manager, Runtime,
47};
48
49// Re-export all model types for public API
50pub use models::*;
51
52// ============================================================================
53// Platform modules
54// ============================================================================
55
56#[cfg(desktop)]
57mod desktop;
58#[cfg(mobile)]
59mod mobile;
60
61mod commands;
62mod error;
63mod models;
64
65pub use error::{Error, Result};
66
67#[cfg(desktop)]
68use desktop::DeviceInfo;
69#[cfg(mobile)]
70use mobile::DeviceInfo;
71
72/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the device-info APIs.
73pub trait DeviceInfoExt<R: Runtime> {
74 fn device_info(&self) -> &DeviceInfo<R>;
75}
76
77impl<R: Runtime, T: Manager<R>> crate::DeviceInfoExt<R> for T {
78 fn device_info(&self) -> &DeviceInfo<R> {
79 self.state::<DeviceInfo<R>>().inner()
80 }
81}
82
83/// Initializes the plugin.
84pub fn init<R: Runtime>() -> TauriPlugin<R> {
85 Builder::new("device-info")
86 .invoke_handler(tauri::generate_handler![
87 commands::get_device_info,
88 commands::get_battery_info,
89 commands::get_network_info,
90 commands::get_storage_info,
91 commands::get_display_info
92 ])
93 .setup(|app, api| {
94 #[cfg(mobile)]
95 let device_info = mobile::init(app, api)?;
96 #[cfg(desktop)]
97 let device_info = desktop::init(app, api)?;
98 app.manage(device_info);
99 Ok(())
100 })
101 .build()
102}