Skip to content

Commit

Permalink
PluginUtils
Browse files Browse the repository at this point in the history
  • Loading branch information
Brendonovich committed Aug 31, 2023
1 parent 7215a91 commit 56e05eb
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 31 deletions.
64 changes: 39 additions & 25 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ use std::{
use crate::ts::ExportConfig;
use specta::{functions::FunctionDataType, ts::TsExportError, ExportError, TypeMap};

use tauri::{Invoke, Runtime};
use tauri::{Invoke, Manager, Runtime};
pub use tauri_specta_macros::Event;

/// The exporter for [Javascript](https://www.javascript.com).
Expand Down Expand Up @@ -150,7 +150,7 @@ pub(crate) const CRINGE_ESLINT_DISABLE: &str = "/* eslint-disable */
// doc_comment::doctest!("../README.md");

/// A set of functions that produce language-specific code
pub trait ExportLanguage {
pub trait ExportLanguage: 'static {
/// Type definitions and constants that the generated functions rely on
fn globals() -> String;

Expand All @@ -176,7 +176,7 @@ pub trait ExportLanguage {
) -> Result<String, TsExportError>;
}

pub trait CommandsTypeState {
pub trait CommandsTypeState: 'static {
type Runtime: tauri::Runtime;
type InvokeHandler: Fn(tauri::Invoke<Self::Runtime>) + Send + Sync + 'static;

Expand Down Expand Up @@ -217,7 +217,7 @@ where
}
}

pub trait EventsTypeState {
pub trait EventsTypeState: 'static {
fn get(self) -> CollectEventsTuple;
}

Expand Down Expand Up @@ -306,9 +306,16 @@ impl<TLang, TCommands, TEvents> Exporter<TLang, TCommands, TEvents> {
}
}

// pub struct AugmentPlugin<TInvokeHandler> {
// invoke_handler: TInvokeHandler,
// }
pub struct PluginUtils<TCommands, TManager, TSetup>
where
TCommands: CommandsTypeState,
TManager: Manager<TCommands::Runtime>,
TSetup: FnOnce(&TManager),
{
pub invoke_handler: TCommands::InvokeHandler,
pub setup: TSetup,
phantom: PhantomData<TManager>,
}

impl<TLang, TCommands, TEvents> Exporter<TLang, TCommands, TEvents>
where
Expand All @@ -317,39 +324,46 @@ where
TEvents: EventsTypeState,
{
#[must_use]
pub fn build_plugin(mut self) -> tauri::plugin::TauriPlugin<TCommands::Runtime> {
pub fn build_plugin(self) -> tauri::plugin::TauriPlugin<TCommands::Runtime> {
const PLUGIN_NAME: &str = "tauri-specta";

let plugin_name = PluginName::new(PLUGIN_NAME);

self.cfg.get_or_insert_with(Default::default).plugin_name = plugin_name;

let (invoke_handler, event_collection) = self.export_inner().unwrap();

let builder = tauri::plugin::Builder::new(PLUGIN_NAME);

let plugin_utils = self.build_plugin_utils(PLUGIN_NAME);

builder
.invoke_handler(invoke_handler)
.invoke_handler(plugin_utils.invoke_handler)
.setup(move |app| {
let registry = EventRegistry::get_or_manage(app);
registry.register_collection(event_collection, plugin_name);
(plugin_utils.setup)(app);

Ok(())
})
.build()
}

// pub fn augment_plugin(mut self) -> AugmentPlugin<TCommands::InvokeHandler> {
// let (invoke_handler, registry) = self.export_inner().unwrap();
#[must_use]
pub fn build_plugin_utils<TManager>(
mut self,
plugin_name: &'static str,
) -> PluginUtils<TCommands, TManager, impl FnOnce(&TManager)>
where
TManager: Manager<TCommands::Runtime>,
{
let plugin_name = PluginName::new(plugin_name);

// // builder.setup(move |app| {
// // app.manage(registry);
self.cfg.get_or_insert_with(Default::default).plugin_name = plugin_name;

// // Ok(())
// // });
let (invoke_handler, event_collection) = self.export_inner().unwrap();

Check warning on line 356 in src/lib.rs

View workflow job for this annotation

GitHub Actions / clippy

used `unwrap()` on a `Result` value

warning: used `unwrap()` on a `Result` value --> src/lib.rs:356:50 | 356 | let (invoke_handler, event_collection) = self.export_inner().unwrap(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: if you don't want to handle the `Err` case gracefully, consider using `expect()` to provide a better panic message = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_used note: the lint level is defined here --> src/lib.rs:91:22 | 91 | #![warn(clippy::all, clippy::unwrap_used, clippy::panic | ^^^^^^^^^^^^^^^^^^^

// AugmentPlugin { invoke_handler }
// }
PluginUtils {
invoke_handler,
setup: move |app| {
let registry = EventRegistry::get_or_manage(app);
registry.register_collection(event_collection, plugin_name);
},
phantom: PhantomData,
}
}

fn export_inner(self) -> Result<(TCommands::InvokeHandler, EventCollection), TsExportError> {
let path = self.export_path.clone();
Expand Down
6 changes: 0 additions & 6 deletions src/ts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,6 @@ impl ExportConfig {
..Default::default()
}
}

/// Sets the plugin name for this [`ExportConfiguration`].
pub fn plugin_name(mut self, plugin_name: &'static str) -> Self {
self.plugin_name = PluginName::new(plugin_name);
self
}
}

impl From<specta::ts::ExportConfig> for ExportConfig {
Expand Down

0 comments on commit 56e05eb

Please sign in to comment.