Skip to main content

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}