use crate::common::{AnyResult, AviUtl2Info};
#[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;
pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
fn functions() -> Vec<ModuleFunction>;
}
pub trait ScriptModule: Sized + Send + Sync + 'static + ScriptModuleFunctions {
fn new(info: AviUtl2Info) -> AnyResult<Self>;
fn plugin_info(&self) -> 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)
}
}