#[derive(Debug, Clone)]
pub struct ScriptModuleTable {
pub information: String,
pub functions: Vec<ModuleFunction>,
}
#[derive(Debug, Clone)]
pub struct ModuleFunction {
pub name: String,
pub func: extern "C" fn(*mut crate::sys::module2::SCRIPT_MODULE_PARAM),
}
pub use aviutl2_macros::{
module_functions as functions, module_metatable as metatable, script_module_callback,
script_module_direct_callback,
};
pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
fn functions() -> Vec<crate::module::ModuleFunction>;
}
pub trait ScriptModule:
Sized + Send + Sync + 'static + crate::module::ScriptModuleFunctions
{
fn new(info: crate::common::AviUtl2Info) -> crate::common::AnyResult<Self>;
fn plugin_info(&self) -> crate::module::ScriptModuleTable;
fn with_instance<R>(f: impl FnOnce(&Self) -> R) -> R
where
Self: crate::module::__bridge::ScriptModuleSingleton,
{
<Self as crate::module::__bridge::ScriptModuleSingleton>::with_instance(f)
}
fn with_instance_mut<R>(f: impl FnOnce(&mut Self) -> R) -> R
where
Self: crate::module::__bridge::ScriptModuleSingleton,
{
<Self as crate::module::__bridge::ScriptModuleSingleton>::with_instance_mut(f)
}
}