aviutl2\module/
binding.rs

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