use std::any::Any;
use std::collections::HashMap;
use crate::errors::PluginError;
pub type Runner<A, R> = Box<
dyn Fn(&A, &(dyn Any + Send + Sync)) -> Result<R, Box<dyn std::error::Error + Send + Sync>>
+ Send
+ Sync,
>;
pub trait PluginAction<A, R, R2>: Send + Sync {
fn run(
&self,
action_data: A,
plugin_data: &HashMap<String, Box<dyn Any + Send + Sync>>,
) -> Result<R2, PluginError>;
fn register_plugin(
&mut self,
name: &str,
runner: impl Fn(&A, &(dyn Any + Send + Sync)) -> Result<R, Box<dyn std::error::Error + Send + Sync>>
+ Send
+ Sync
+ 'static,
);
fn register_plugin_box(&mut self, name: &str, runner: Runner<A, R>);
}