linera_witty/wit_generation/
stub_instance.rs1use std::{borrow::Cow, marker::PhantomData};
8
9use crate::{
10 memory_layout::FlatLayout, GuestPointer, Instance, InstanceWithFunction, InstanceWithMemory,
11 Runtime, RuntimeError, RuntimeMemory,
12};
13
14pub struct StubInstance<UserData = ()> {
19 _user_data: PhantomData<UserData>,
20}
21
22impl<UserData> Default for StubInstance<UserData> {
23 fn default() -> Self {
24 StubInstance {
25 _user_data: PhantomData,
26 }
27 }
28}
29
30impl<UserData> Instance for StubInstance<UserData> {
31 type Runtime = StubRuntime;
32 type UserData = UserData;
33 type UserDataReference<'a>
34 = &'a UserData
35 where
36 Self::UserData: 'a,
37 Self: 'a;
38 type UserDataMutReference<'a>
39 = &'a mut UserData
40 where
41 Self::UserData: 'a,
42 Self: 'a;
43
44 fn load_export(&mut self, _name: &str) -> Option<()> {
45 unimplemented!("`StubInstance` can not be used as a real `Instance`");
46 }
47
48 fn user_data(&self) -> Self::UserDataReference<'_> {
49 unimplemented!("`StubInstance` can not be used as a real `Instance`");
50 }
51
52 fn user_data_mut(&mut self) -> Self::UserDataMutReference<'_> {
53 unimplemented!("`StubInstance` can not be used as a real `Instance`");
54 }
55}
56
57impl<Parameters, Results, UserData> InstanceWithFunction<Parameters, Results>
58 for StubInstance<UserData>
59where
60 Parameters: FlatLayout + 'static,
61 Results: FlatLayout + 'static,
62{
63 type Function = ();
64
65 fn function_from_export(
66 &mut self,
67 _name: <Self::Runtime as Runtime>::Export,
68 ) -> Result<Option<Self::Function>, RuntimeError> {
69 unimplemented!("`StubInstance` can not be used as a real `InstanceWithFunction`");
70 }
71
72 fn call(
73 &mut self,
74 _function: &Self::Function,
75 _parameters: Parameters,
76 ) -> Result<Results, RuntimeError> {
77 unimplemented!("`StubInstance` can not be used as a real `InstanceWithFunction`");
78 }
79}
80
81impl<UserData> InstanceWithMemory for StubInstance<UserData> {
82 fn memory_from_export(&self, _export: ()) -> Result<Option<StubMemory>, RuntimeError> {
83 unimplemented!("`StubInstance` can not be used as a real `InstanceWithMemory`");
84 }
85}
86
87pub struct StubRuntime;
89
90impl Runtime for StubRuntime {
91 type Export = ();
92 type Memory = StubMemory;
93}
94
95pub struct StubMemory;
97
98impl<UserData> RuntimeMemory<StubInstance<UserData>> for StubMemory {
99 fn read<'instance>(
100 &self,
101 _instance: &'instance StubInstance<UserData>,
102 _location: GuestPointer,
103 _length: u32,
104 ) -> Result<Cow<'instance, [u8]>, RuntimeError> {
105 unimplemented!("`StubMemory` can not be used as a real `RuntimeMemory`");
106 }
107
108 fn write(
109 &mut self,
110 _instance: &mut StubInstance<UserData>,
111 _location: GuestPointer,
112 _bytes: &[u8],
113 ) -> Result<(), RuntimeError> {
114 unimplemented!("`StubMemory` can not be used as a real `RuntimeMemory`");
115 }
116}