Skip to main content

tauri_plugin_finueva_pub_sub/
lib.rs

1use tauri::{
2    plugin::{Builder as TauriPluginBuilder, TauriPlugin},
3    Manager, Runtime,
4};
5
6pub use models::*;
7
8#[cfg(desktop)]
9mod desktop;
10#[cfg(all(desktop, feature = "desktop-fcm"))]
11mod desktop_fcm;
12#[cfg(mobile)]
13mod mobile;
14
15mod commands;
16mod error;
17mod models;
18mod transport;
19
20#[cfg(all(desktop, feature = "desktop-fcm"))]
21pub use desktop_fcm::{DesktopFcmConfig, DesktopFcmRegistration};
22pub use error::{Error, Result};
23
24#[cfg(desktop)]
25use desktop::FinuevaPubSub;
26#[cfg(mobile)]
27use mobile::FinuevaPubSub;
28
29/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the finueva-pub-sub APIs.
30pub trait FinuevaPubSubExt<R: Runtime> {
31    fn finueva_pub_sub(&self) -> &FinuevaPubSub<R>;
32}
33
34impl<R: Runtime, T: Manager<R>> crate::FinuevaPubSubExt<R> for T {
35    fn finueva_pub_sub(&self) -> &FinuevaPubSub<R> {
36        self.state::<FinuevaPubSub<R>>().inner()
37    }
38}
39
40/// Configures the plugin before it is registered with a Tauri application.
41pub struct Builder {
42    #[cfg(all(desktop, feature = "desktop-fcm"))]
43    desktop_fcm: DesktopFcmConfig,
44}
45
46impl Default for Builder {
47    fn default() -> Self {
48        Self {
49            #[cfg(all(desktop, feature = "desktop-fcm"))]
50            desktop_fcm: DesktopFcmConfig::embedded_production(),
51        }
52    }
53}
54
55impl Builder {
56    pub fn new() -> Self {
57        Self::default()
58    }
59
60    #[cfg(all(desktop, feature = "desktop-fcm"))]
61    pub fn desktop_fcm(mut self, config: DesktopFcmConfig) -> Self {
62        self.desktop_fcm = config;
63        self
64    }
65
66    pub fn build<R: Runtime>(self) -> TauriPlugin<R> {
67        #[cfg(all(desktop, feature = "desktop-fcm"))]
68        let desktop_fcm = self.desktop_fcm;
69
70        TauriPluginBuilder::new("finueva-pub-sub")
71            .invoke_handler(tauri::generate_handler![
72                commands::connect,
73                commands::cancel_operation,
74                commands::disconnect,
75                commands::put_installation,
76                commands::delete_installation,
77                commands::check_push_permission,
78                commands::request_push_permission,
79                commands::get_push_token,
80                commands::delete_push_token,
81                commands::drain_pending_push,
82                commands::set_push_listener_active,
83                #[cfg(desktop)]
84                commands::register_listener,
85                #[cfg(desktop)]
86                commands::remove_listener,
87            ])
88            .setup(move |app, api| {
89                #[cfg(mobile)]
90                let finueva_pub_sub = mobile::init(app, api)?;
91                #[cfg(all(desktop, not(feature = "desktop-fcm")))]
92                let finueva_pub_sub = desktop::init(app, api)?;
93                #[cfg(all(desktop, feature = "desktop-fcm"))]
94                let finueva_pub_sub = desktop::init(app, api, desktop_fcm)?;
95                app.manage(finueva_pub_sub);
96                Ok(())
97            })
98            .build()
99    }
100}
101
102/// Initializes the plugin with the embedded Firebase configuration.
103pub fn init<R: Runtime>() -> TauriPlugin<R> {
104    Builder::new().build()
105}