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::module_functions as functions;
22
23pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
26 fn functions() -> Vec<crate::module::ModuleFunction>;
28}
29
30pub trait ScriptModule:
33 Sized + Send + Sync + 'static + crate::module::ScriptModuleFunctions
34{
35 fn new(info: crate::common::AviUtl2Info) -> crate::common::AnyResult<Self>;
37
38 fn plugin_info(&self) -> crate::module::ScriptModuleTable;
40
41 fn with_instance<R>(f: impl FnOnce(&Self) -> R) -> R
47 where
48 Self: crate::module::__bridge::ScriptModuleSingleton,
49 {
50 <Self as crate::module::__bridge::ScriptModuleSingleton>::with_instance(f)
51 }
52
53 fn with_instance_mut<R>(f: impl FnOnce(&mut Self) -> R) -> R
59 where
60 Self: crate::module::__bridge::ScriptModuleSingleton,
61 {
62 <Self as crate::module::__bridge::ScriptModuleSingleton>::with_instance_mut(f)
63 }
64}