mod imp;
use crate::{
BackendKind, WasmTypeList,
vm::{VMFunctionCallback, VMTrampoline},
};
pub trait HostFunction<T, Args, Rets, Kind>
where
Args: WasmTypeList,
Rets: WasmTypeList,
Kind: HostFunctionKind,
{
fn function_callback(&self, rt: BackendKind) -> crate::vm::VMFunctionCallback;
fn function_callback_sys(&self) -> crate::vm::VMFunctionCallback {
unimplemented!()
}
fn call_trampoline_address() -> crate::vm::VMTrampoline;
}
#[doc(hidden)]
pub trait HostFunctionKind: private::HostFunctionKindSealed {}
pub struct WithEnv;
impl HostFunctionKind for WithEnv {}
pub struct WithoutEnv;
impl HostFunctionKind for WithoutEnv {}
mod private {
pub trait HostFunctionKindSealed {}
impl HostFunctionKindSealed for super::WithEnv {}
impl HostFunctionKindSealed for super::WithoutEnv {}
}