Skip to main content

aviutl2\module/
binding.rs

1/// スクリプトモジュールプラグインの情報を表す構造体。
2#[derive(Debug, Clone)]
3pub struct ScriptModuleTable {
4    /// プラグインの情報。
5    /// 「プラグイン情報」ダイアログで表示されます。
6    pub information: String,
7
8    /// プラグインが提供する関数。
9    pub functions: Vec<ModuleFunction>,
10}
11
12/// スクリプトモジュールプラグインの関数を表す構造体。
13#[derive(Debug, Clone)]
14pub struct ModuleFunction {
15    /// 関数名。
16    pub name: String,
17    /// 関数の実装。
18    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
26/// スクリプトモジュールの関数一覧を返すトレイト。
27/// [`macro@functions`]マクロで実装できます。
28pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
29    /// プラグインが提供する関数の一覧を返す。
30    fn functions() -> Vec<crate::module::ModuleFunction>;
31}
32
33/// スクリプトモジュールプラグインのトレイト。
34/// このトレイトを実装し、[`crate::register_script_module!`] マクロを使用してプラグインを登録します。
35pub trait ScriptModule:
36    Sized + Send + Sync + 'static + crate::module::ScriptModuleFunctions
37{
38    /// プラグインを初期化する。
39    fn new(info: crate::common::AviUtl2Info) -> crate::common::AnyResult<Self>;
40
41    /// プラグインの情報を返す。
42    fn plugin_info(&self) -> crate::module::ScriptModuleTable;
43
44    /// シングルトンインスタンスを参照するためのヘルパーメソッド。
45    ///
46    /// # Panics
47    ///
48    /// プラグインが初期化されていない場合や、二重に呼び出された場合にパニックします。
49    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    /// シングルトンインスタンスを可変参照するためのヘルパーメソッド。
57    ///
58    /// # Panics
59    ///
60    /// プラグインが初期化されていない場合や、二重に呼び出された場合にパニックします。
61    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}