aviutl2\module/
binding.rs1#[derive(Debug, Clone)]
3pub struct ScriptModuleTable {
4 pub information: String,
7
8 pub functions: Vec<ModuleFunction>,
10}
11
12#[derive(Debug, Clone)]
14pub struct ModuleFunction {
15 pub name: String,
17 pub func: extern "C" fn(*mut crate::sys::module2::SCRIPT_MODULE_PARAM),
19}
20
21pub use aviutl2_macros::{
22 module_functions as functions, module_metatable as metatable, script_module_callback,
23 script_module_direct_callback,
24};
25
26pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
29 fn functions() -> Vec<crate::module::ModuleFunction>;
31}
32
33pub trait ScriptModule:
36 Sized + Send + Sync + 'static + crate::module::ScriptModuleFunctions
37{
38 fn new(info: crate::common::AviUtl2Info) -> crate::common::AnyResult<Self>;
40
41 fn plugin_info(&self) -> crate::module::ScriptModuleTable;
43
44 fn with_instance<R>(f: impl FnOnce(&Self) -> R) -> R
50 where
51 Self: crate::module::__bridge::ScriptModuleSingleton,
52 {
53 <Self as crate::module::__bridge::ScriptModuleSingleton>::with_instance(f)
54 }
55
56 fn with_instance_mut<R>(f: impl FnOnce(&mut Self) -> R) -> R
62 where
63 Self: crate::module::__bridge::ScriptModuleSingleton,
64 {
65 <Self as crate::module::__bridge::ScriptModuleSingleton>::with_instance_mut(f)
66 }
67}