functions

Attribute Macro functions 

Source
#[functions]
Available on crate feature module only.
Expand description

ScriptModuleFunctions を実装するためのマクロ。

このマクロはimplブロックに対して適用されます。 implブロック内で定義された関数がスクリプトモジュールの関数として登録されます。

§Attributes

§direct

関数の引数を手動で処理する関数として登録します。 関数のシグネチャは以下のようになります。

fn function_name(params: &mut aviutl2::module::ScriptModuleCallHandle) -> ()

§Example

use aviutl2::module::IntoScriptModuleReturnValue;

#[aviutl2::plugin(ScriptModule)]
struct MyModule {
    counter: std::sync::atomic::AtomicI32,
}
#[aviutl2::module::functions]
impl MyModule {
    fn sum(a: i32, b: i32) -> i32 {
        a + b
    }

    fn return_overload(a: i32) -> impl aviutl2::module::IntoScriptModuleReturnValue {
        if a % 2 == 0 {
            "Even".into_return_values().map_err(anyhow::Error::from)
        } else {
            ("Odd", a).into_return_values()
        }
    }

    fn increment_counter(&self) -> i32 {
        self.counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst) + 1
    }

    #[direct]
    fn direct_sum(params: &mut aviutl2::module::ScriptModuleCallHandle) {
        let a: i32 = params.get_param(0).unwrap_or(0);
        let b: i32 = params.get_param(1).unwrap_or(0);
        params.push_result(a + b);
    }

    #[direct]
    fn direct_sum_with_counter(
        &self,
        params: &mut aviutl2::module::ScriptModuleCallHandle,
    ) {
        let a: i32 = params.get_param(0).unwrap_or(0);
        let b: i32 = params.get_param(1).unwrap_or(0);
        let count = self.increment_counter();
        params.push_result((a + b, count));
    }
}