// Copyright 2019-2022 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT #![cfg(mobile)] use tauri::{ plugin::{Builder, PluginHandle, TauriPlugin}, Manager, Runtime, }; pub use models::*; mod error; pub mod models; pub use error::*; #[cfg(target_os = "android")] const PLUGIN_IDENTIFIER: &str = "app.tauri.camera"; #[cfg(target_os = "ios")] tauri::ios_plugin_binding!(init_plugin_camera); /// A helper class to access the mobile camera APIs. pub struct Camera(PluginHandle); impl Camera { pub fn get_photo(&self, options: ImageOptions) -> Result { self .0 .run_mobile_plugin("getPhoto", options) .map_err(Into::into) } } /// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the camera APIs. pub trait CameraExt { fn camera(&self) -> &Camera; } impl> CameraExt for T { fn camera(&self) -> &Camera { self.state::>().inner() } } /// Initializes the plugin. pub fn init() -> TauriPlugin { Builder::new("camera") .setup(|app, api| { #[cfg(target_os = "android")] let handle = api.register_android_plugin(PLUGIN_IDENTIFIER, "CameraPlugin")?; #[cfg(target_os = "ios")] let handle = api.register_ios_plugin(init_plugin_camera)?; app.manage(Camera(handle)); Ok(()) }) .build() }