#[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));
}
}