#![cfg(feature = "guest")]
#![allow(clippy::needless_pass_by_value)]
use rustledger_plugin_types::{
DirectiveData, PluginInput, PluginOp, PluginOutput, wasm_plugin_main,
};
mod free_fn {
use super::*;
fn process(input: PluginInput) -> PluginOutput {
let mut ops = Vec::with_capacity(input.directives.len());
for (i, wrapper) in input.directives.into_iter().enumerate() {
if let DirectiveData::Transaction(_) = wrapper.data {
ops.push(PluginOp::Modify(i, wrapper));
} else {
ops.push(PluginOp::Keep(i));
}
}
PluginOutput {
ops,
errors: vec![],
}
}
wasm_plugin_main! {
process: process,
}
}
mod closure_form {
use super::*;
wasm_plugin_main! {
process: |input: PluginInput| PluginOutput::passthrough(input.directives.len()),
}
}
mod passthrough_form {
use super::*;
fn process(input: PluginInput) -> PluginOutput {
PluginOutput::passthrough(input.directives.len())
}
wasm_plugin_main! {
process: process,
}
}
#[test]
fn free_fn_emits_expected_signatures() {
let _: extern "C" fn(u32) -> *mut u8 = free_fn::__wasm_plugin_alloc;
let _: extern "C" fn(u32, u32) -> u64 = free_fn::__wasm_plugin_process;
}
#[test]
fn closure_form_emits_expected_signatures() {
let _: extern "C" fn(u32) -> *mut u8 = closure_form::__wasm_plugin_alloc;
let _: extern "C" fn(u32, u32) -> u64 = closure_form::__wasm_plugin_process;
}
#[test]
fn passthrough_form_emits_expected_signatures() {
let _: extern "C" fn(u32) -> *mut u8 = passthrough_form::__wasm_plugin_alloc;
let _: extern "C" fn(u32, u32) -> u64 = passthrough_form::__wasm_plugin_process;
}