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::module_functions as functions;
22
23/// スクリプトモジュールの関数一覧を返すトレイト。
24/// [`macro@functions`]マクロで実装できます。
25pub trait ScriptModuleFunctions: Sized + Send + Sync + 'static {
26    /// プラグインが提供する関数の一覧を返す。
27    fn functions() -> Vec<crate::module::ModuleFunction>;
28}
29
30/// スクリプトモジュールプラグインのトレイト。
31/// このトレイトを実装し、[`crate::register_script_module!`] マクロを使用してプラグインを登録します。
32pub trait ScriptModule:
33    Sized + Send + Sync + 'static + crate::module::ScriptModuleFunctions
34{
35    /// プラグインを初期化する。
36    fn new(info: crate::common::AviUtl2Info) -> crate::common::AnyResult<Self>;
37
38    /// プラグインの情報を返す。
39    fn plugin_info(&self) -> crate::module::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}