tauri_plugin_finueva_pub_sub/
lib.rs1use 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
29pub 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
40pub 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
102pub fn init<R: Runtime>() -> TauriPlugin<R> {
104 Builder::new().build()
105}