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;
}