aviutl2\module/
binding.rs1use crate::common::{AnyResult, AviUtl2Info};
2
3#[derive(Debug, Clone)]
5pub struct ScriptModuleTable {
6 pub information: String,
9
10 pub functions: Vec<ModuleFunction>,
12}
13
14#[derive(Debug, Clone)]
16pub struct ModuleFunction {
17 pub name: String,
19 pub func: extern "C" fn(*mut crate::sys::module2::SCRIPT_MODULE_PARAM),
21}
22
23pub use aviutl2_macros::module_functions as functions;
24
25pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
28 fn functions() -> Vec<ModuleFunction>;
30}
31
32pub trait ScriptModule: Sized + Send + Sync + 'static + ScriptModuleFunctions {
35 fn new(info: AviUtl2Info) -> AnyResult<Self>;
37
38 fn plugin_info(&self) -> 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}