// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT //! Scan QR codes, EAN-13 and other kinds of barcodes with the device's camera. //! //! - Supported platforms: Android and iOS. #![cfg(mobile)] use tauri::{ Manager, Runtime, plugin::{Builder, PluginHandle, TauriPlugin}, }; mod error; mod models; pub use error::{Error, Result}; #[cfg(target_os = "android")] const PLUGIN_IDENTIFIER: &str = "app.tauri.barcodescanner"; #[cfg(target_os = "ios")] tauri::ios_plugin_binding!(init_plugin_barcode_scanner); /// Access to the scanner APIs. pub struct BarcodeScanner(PluginHandle); impl BarcodeScanner {} /// Extensions to [`tauri::App`], [`tauri::AppHandle`], [`tauri::WebviewWindow`], [`tauri::Webview`] and [`tauri::Window`] to access the barcode scanner APIs. pub trait BarcodeScannerExt { /// Returns the [`BarcodeScanner`] instance managed by the app. fn barcode_scanner(&self) -> &BarcodeScanner; } impl> crate::BarcodeScannerExt for T { fn barcode_scanner(&self) -> &BarcodeScanner { self.state::>().inner() } } /// Initializes the plugin. pub fn init() -> TauriPlugin { Builder::new("barcode-scanner") .setup(|app, api| { #[cfg(target_os = "android")] let handle = api.register_android_plugin(PLUGIN_IDENTIFIER, "BarcodeScannerPlugin")?; #[cfg(target_os = "ios")] let handle = api.register_ios_plugin(init_plugin_barcode_scanner)?; app.manage(BarcodeScanner(handle)); Ok(()) }) .build() }