linera_witty/imported_function_interface/
mod.rs1mod parameters;
14mod results;
15
16use self::{parameters::FlatHostParameters, results::FlatHostResults};
17use crate::{
18 memory_layout::FlatLayout, InstanceWithMemory, Layout, Memory, Runtime, RuntimeError,
19 RuntimeMemory, WitLoad, WitStore,
20};
21
22pub trait ImportedFunctionInterface {
27 type HostParameters: WitStore;
29
30 type HostResults: WitLoad;
32
33 type GuestParameters: FlatLayout;
35
36 type GuestResults: FlatLayout;
38
39 fn lower_parameters<Instance>(
41 parameters: Self::HostParameters,
42 memory: &mut Memory<'_, Instance>,
43 ) -> Result<Self::GuestParameters, RuntimeError>
44 where
45 Instance: InstanceWithMemory,
46 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
47
48 fn lift_results<Instance>(
50 results: Self::GuestResults,
51 memory: &Memory<'_, Instance>,
52 ) -> Result<Self::HostResults, RuntimeError>
53 where
54 Instance: InstanceWithMemory,
55 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
56}
57
58impl<Parameters, Results> ImportedFunctionInterface for (Parameters, Results)
59where
60 Parameters: WitStore,
61 Results: WitLoad,
62 <Parameters::Layout as Layout>::Flat: FlatHostParameters,
63 <Results::Layout as Layout>::Flat: FlatHostResults,
64{
65 type HostParameters = Parameters;
66 type HostResults = Results;
67 type GuestParameters =
68 <<Parameters::Layout as Layout>::Flat as FlatHostParameters>::GuestParameters;
69 type GuestResults = <<Results::Layout as Layout>::Flat as FlatHostResults>::GuestResults;
70
71 fn lower_parameters<Instance>(
72 parameters: Self::HostParameters,
73 memory: &mut Memory<'_, Instance>,
74 ) -> Result<Self::GuestParameters, RuntimeError>
75 where
76 Instance: InstanceWithMemory,
77 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>,
78 {
79 <<Parameters::Layout as Layout>::Flat as FlatHostParameters>::lower_parameters(
80 parameters, memory,
81 )
82 }
83
84 fn lift_results<Instance>(
85 results: Self::GuestResults,
86 memory: &Memory<'_, Instance>,
87 ) -> Result<Self::HostResults, RuntimeError>
88 where
89 Instance: InstanceWithMemory,
90 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>,
91 {
92 <<Results::Layout as Layout>::Flat as FlatHostResults>::lift_results(results, memory)
93 }
94}