tauri_plugin_biometric/
lib.rs1#![cfg(mobile)]
10
11use serde::Serialize;
12use tauri::{
13 Manager, Runtime,
14 plugin::{Builder, PluginHandle, TauriPlugin},
15};
16
17pub use models::*;
18
19mod error;
20mod models;
21
22pub use error::{Error, Result};
23
24#[cfg(target_os = "android")]
25const PLUGIN_IDENTIFIER: &str = "app.tauri.biometric";
26
27#[cfg(target_os = "ios")]
28tauri::ios_plugin_binding!(init_plugin_biometric);
29
30pub struct Biometric<R: Runtime>(PluginHandle<R>);
32
33#[derive(Serialize)]
34struct AuthenticatePayload {
35 reason: String,
36 #[serde(flatten)]
37 options: AuthOptions,
38}
39
40impl<R: Runtime> Biometric<R> {
41 pub fn status(&self) -> crate::Result<Status> {
44 self.0.run_mobile_plugin("status", ()).map_err(Into::into)
45 }
46
47 pub fn authenticate(&self, reason: String, options: AuthOptions) -> crate::Result<()> {
52 self.0
53 .run_mobile_plugin("authenticate", AuthenticatePayload { reason, options })
54 .map_err(Into::into)
55 }
56}
57
58pub trait BiometricExt<R: Runtime> {
60 fn biometric(&self) -> &Biometric<R>;
62}
63
64impl<R: Runtime, T: Manager<R>> crate::BiometricExt<R> for T {
65 fn biometric(&self) -> &Biometric<R> {
66 self.state::<Biometric<R>>().inner()
67 }
68}
69
70pub fn init<R: Runtime>() -> TauriPlugin<R> {
72 Builder::new("biometric")
73 .setup(|app, api| {
74 #[cfg(target_os = "android")]
75 let handle = api.register_android_plugin(PLUGIN_IDENTIFIER, "BiometricPlugin")?;
76 #[cfg(target_os = "ios")]
77 let handle = api.register_ios_plugin(init_plugin_biometric)?;
78 app.manage(Biometric(handle));
79 Ok(())
80 })
81 .build()
82}