feat: change fnonce of register_function to fn
This commit is contained in:
@@ -6,7 +6,7 @@ resolver = "2"
|
||||
|
||||
shared_utils = { version = "0.1.0", path = "crates/shared_utils" }
|
||||
rhai_impl = { version = "0.1.0", path = "crates/rhai_impl" }
|
||||
ewwii_plugin_api = { version = "0.6.0", path = "crates/ewwii_plugin_api" }
|
||||
ewwii_plugin_api = { version = "0.6.1", path = "crates/ewwii_plugin_api" }
|
||||
|
||||
anyhow = "1.0.86"
|
||||
ahash = "0.8.12"
|
||||
|
||||
@@ -36,7 +36,7 @@ impl EwwiiAPI for EwwiiImpl {
|
||||
fn register_function(
|
||||
&self,
|
||||
name: String,
|
||||
f: Box<dyn FnOnce(rhai::Array) -> Dynamic + Send>,
|
||||
f: Box<dyn Fn(Array) -> Dynamic + Send + Sync>,
|
||||
) -> Result<(), String> {
|
||||
let func_info = (name, f);
|
||||
|
||||
@@ -73,7 +73,7 @@ impl EwwiiAPI for EwwiiImpl {
|
||||
|
||||
pub(crate) enum PluginRequest {
|
||||
RhaiEngineAct(Box<dyn FnOnce(&mut Engine) + Send>),
|
||||
RegisterFunc((String, Box<dyn FnOnce(Array) -> Dynamic + Send>)),
|
||||
RegisterFunc((String, Box<dyn Fn(Array) -> Dynamic + Send + Sync>)),
|
||||
ListWidgetIds(Sender<Vec<u64>>),
|
||||
WidgetRegistryAct(Box<dyn FnOnce(&mut widget_backend::WidgetRegistryRepr) + Send>),
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ewwii_plugin_api"
|
||||
version = "0.6.0"
|
||||
version = "0.6.1"
|
||||
authors = ["byson94 <byson94wastaken@gmail.com>"]
|
||||
edition = "2021"
|
||||
license = "GPL-3.0-or-later"
|
||||
|
||||
@@ -86,7 +86,7 @@ pub trait EwwiiAPI: Send + Sync {
|
||||
///
|
||||
/// impl Plugin for DummyStructure {
|
||||
/// fn init(&self, host: &dyn EwwiiAPI) {
|
||||
/// host.register_function(Box::new(|args| {
|
||||
/// host.register_function("my_func".to_string(), Box::new(|args| {
|
||||
/// // Do stuff
|
||||
/// // - Perform things on the args (if needed)
|
||||
/// // - And return a value
|
||||
@@ -100,7 +100,7 @@ pub trait EwwiiAPI: Send + Sync {
|
||||
fn register_function(
|
||||
&self,
|
||||
name: String,
|
||||
f: Box<dyn FnOnce(rhai::Array) -> rhai::Dynamic + Send>,
|
||||
f: Box<dyn Fn(rhai::Array) -> rhai::Dynamic + Send + Sync>,
|
||||
) -> Result<(), String>;
|
||||
|
||||
// == Widget Rendering & Logic == //
|
||||
|
||||
@@ -20,17 +20,17 @@ pub mod slib {
|
||||
/// ```javascript
|
||||
/// import "api::slib" as slib;
|
||||
///
|
||||
/// let eg_output = slib::call("my_func", ["foo", 80, true]);
|
||||
/// let eg_output = slib::call_fn("my_func", ["foo", 80, true]);
|
||||
/// ```
|
||||
pub fn call(fn_name: String, args: Array) -> Dynamic {
|
||||
// TODO:
|
||||
//
|
||||
// - Find the function with the name
|
||||
// - Call that function the args (pass it directly)
|
||||
|
||||
pub fn call_fn(fn_name: String, args: Array) -> Dynamic {
|
||||
match shared_utils::slib_store::call_registered(&fn_name, args) {
|
||||
Some(d) => d,
|
||||
None => Dynamic::default()
|
||||
Ok(Some(d)) => d,
|
||||
Ok(None) => Dynamic::default(),
|
||||
Err(e) => {
|
||||
log::error!("Error calling function: {}", e);
|
||||
|
||||
Dynamic::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,28 +3,28 @@ use std::collections::HashMap;
|
||||
use std::sync::Mutex;
|
||||
use rhai::{Array, Dynamic};
|
||||
|
||||
static FUNC_REGISTRY: Lazy<Mutex<HashMap<String, Box<dyn FnOnce(Array) -> Dynamic + Send>>>> =
|
||||
static FUNC_REGISTRY: Lazy<Mutex<HashMap<String, Box<dyn Fn(Array) -> Dynamic + Send + Sync>>>> =
|
||||
Lazy::new(|| Mutex::new(HashMap::new()));
|
||||
|
||||
pub fn register_functions(
|
||||
name: String,
|
||||
func: Box<dyn FnOnce(Array) -> Dynamic + Send>
|
||||
func: Box<dyn Fn(Array) -> Dynamic + Send + Sync>,
|
||||
) -> Result<(), String> {
|
||||
let mut registry = FUNC_REGISTRY
|
||||
.lock()
|
||||
.map_err(|e| e.to_string())?; // Propagate the error
|
||||
|
||||
.map_err(|e| e.to_string())?;
|
||||
registry.insert(name, func);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn call_registered(name: &str, args: Array) -> Result<Option<Dynamic>, String> {
|
||||
let registry = FUNC_REGISTRY
|
||||
.lock()
|
||||
.map_err(|e| e.to_string())?;
|
||||
|
||||
|
||||
pub fn call_registered(name: &str, args: Array) -> Option<Dynamic> {
|
||||
let mut registry = FUNC_REGISTRY.lock().unwrap();
|
||||
if let Some(func) = registry.remove(name) {
|
||||
Some(func(args))
|
||||
if let Some(func) = registry.get(name) {
|
||||
Ok(Some(func(args)))
|
||||
} else {
|
||||
None
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user