mod parameters;
mod results;
use self::{parameters::FlatHostParameters, results::FlatHostResults};
use crate::{
memory_layout::FlatLayout, InstanceWithMemory, Layout, Memory, Runtime, RuntimeError,
RuntimeMemory, WitLoad, WitStore,
};
pub trait ImportedFunctionInterface {
type HostParameters: WitStore;
type HostResults: WitLoad;
type GuestParameters: FlatLayout;
type GuestResults: FlatLayout;
fn lower_parameters<Instance>(
parameters: Self::HostParameters,
memory: &mut Memory<'_, Instance>,
) -> Result<Self::GuestParameters, RuntimeError>
where
Instance: InstanceWithMemory,
<Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
fn lift_results<Instance>(
results: Self::GuestResults,
memory: &Memory<'_, Instance>,
) -> Result<Self::HostResults, RuntimeError>
where
Instance: InstanceWithMemory,
<Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
}
impl<Parameters, Results> ImportedFunctionInterface for (Parameters, Results)
where
Parameters: WitStore,
Results: WitLoad,
<Parameters::Layout as Layout>::Flat: FlatHostParameters,
<Results::Layout as Layout>::Flat: FlatHostResults,
{
type HostParameters = Parameters;
type HostResults = Results;
type GuestParameters =
<<Parameters::Layout as Layout>::Flat as FlatHostParameters>::GuestParameters;
type GuestResults = <<Results::Layout as Layout>::Flat as FlatHostResults>::GuestResults;
fn lower_parameters<Instance>(
parameters: Self::HostParameters,
memory: &mut Memory<'_, Instance>,
) -> Result<Self::GuestParameters, RuntimeError>
where
Instance: InstanceWithMemory,
<Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>,
{
<<Parameters::Layout as Layout>::Flat as FlatHostParameters>::lower_parameters(
parameters, memory,
)
}
fn lift_results<Instance>(
results: Self::GuestResults,
memory: &Memory<'_, Instance>,
) -> Result<Self::HostResults, RuntimeError>
where
Instance: InstanceWithMemory,
<Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>,
{
<<Results::Layout as Layout>::Flat as FlatHostResults>::lift_results(results, memory)
}
}