1use crate::{
4 ffi::{self, WasmEdge_Result, WasmEdge_ResultGetCode, WasmEdge_ResultOK},
5 WasmEdgeResult,
6};
7use std::{
8 ffi::{CStr, CString},
9 path::Path,
10};
11use wasmedge_types::error::{
12 CoreCommonError, CoreComponentError, CoreError, CoreExecutionError, CoreInstantiationError,
13 CoreLoadError, CoreValidationError, WasmEdgeError,
14};
15
16#[cfg(unix)]
17pub(crate) fn path_to_cstring(path: &Path) -> WasmEdgeResult<CString> {
18 use std::os::unix::ffi::OsStrExt;
19 CString::new(path.as_os_str().as_bytes())
20 .map_err(|err| Box::new(WasmEdgeError::FoundNulByte(err)))
21}
22
23#[cfg(windows)]
24pub(crate) fn path_to_cstring(path: &Path) -> WasmEdgeResult<CString> {
25 match path.to_str() {
26 Some(s) => CString::new(s).map_err(|err| Box::new(WasmEdgeError::FoundNulByte(err))),
27 None => Err(Box::new(WasmEdgeError::WindowsPathConversion(
28 path.to_string_lossy().to_string(),
29 ))),
30 }
31}
32
33pub fn log_debug_info() {
35 unsafe { ffi::WasmEdge_LogSetDebugLevel() }
36}
37
38pub fn log_error_info() {
40 unsafe { ffi::WasmEdge_LogSetErrorLevel() }
41}
42
43pub fn log_off() {
45 unsafe { ffi::WasmEdge_LogOff() }
46}
47
48pub(crate) fn check(result: WasmEdge_Result) -> WasmEdgeResult<()> {
50 let category = unsafe { ffi::WasmEdge_ResultGetCategory(result) };
51 let code = unsafe {
52 if !WasmEdge_ResultOK(result) {
53 WasmEdge_ResultGetCode(result)
54 } else {
55 0u32
56 }
57 } as ffi::WasmEdge_ErrCode;
58
59 match category {
60 ffi::WasmEdge_ErrCategory_UserLevelError => Err(Box::new(WasmEdgeError::User(code as _))),
61 ffi::WasmEdge_ErrCategory_WASM => gen_runtime_error(code),
62 _ => panic!("Invalid category value: {category}"),
63 }
64}
65
66fn gen_runtime_error(code: ffi::WasmEdge_ErrCode) -> WasmEdgeResult<()> {
67 match code {
68 ffi::WasmEdge_ErrCode_Success => Ok(()),
70 ffi::WasmEdge_ErrCode_Terminated => Err(Box::new(WasmEdgeError::Core(CoreError::Common(
71 CoreCommonError::Terminated,
72 )))),
73 ffi::WasmEdge_ErrCode_RuntimeError => Err(Box::new(WasmEdgeError::Core(
75 CoreError::Common(CoreCommonError::RuntimeError),
76 ))),
77 ffi::WasmEdge_ErrCode_CostLimitExceeded => Err(Box::new(WasmEdgeError::Core(
78 CoreError::Common(CoreCommonError::CostLimitExceeded),
79 ))),
80 ffi::WasmEdge_ErrCode_WrongVMWorkflow => Err(Box::new(WasmEdgeError::Core(
81 CoreError::Common(CoreCommonError::WrongVMWorkflow),
82 ))),
83 ffi::WasmEdge_ErrCode_FuncNotFound => Err(Box::new(WasmEdgeError::Core(
84 CoreError::Common(CoreCommonError::FuncNotFound),
85 ))),
86 ffi::WasmEdge_ErrCode_AOTDisabled => Err(Box::new(WasmEdgeError::Core(CoreError::Common(
87 CoreCommonError::AOTDisabled,
88 )))),
89 ffi::WasmEdge_ErrCode_Interrupted => Err(Box::new(WasmEdgeError::Core(CoreError::Common(
90 CoreCommonError::Interrupted,
91 )))),
92 ffi::WasmEdge_ErrCode_NotValidated => Err(Box::new(WasmEdgeError::Core(
93 CoreError::Common(CoreCommonError::NotValidated),
94 ))),
95 ffi::WasmEdge_ErrCode_NonNullRequired => Err(Box::new(WasmEdgeError::Core(
96 CoreError::Common(CoreCommonError::NonNullRequired),
97 ))),
98 ffi::WasmEdge_ErrCode_SetValueToConst => Err(Box::new(WasmEdgeError::Core(
99 CoreError::Common(CoreCommonError::SetValueToConst),
100 ))),
101 ffi::WasmEdge_ErrCode_SetValueErrorType => Err(Box::new(WasmEdgeError::Core(
102 CoreError::Common(CoreCommonError::SetValueErrorType),
103 ))),
104 ffi::WasmEdge_ErrCode_UserDefError => Err(Box::new(WasmEdgeError::Core(
105 CoreError::Common(CoreCommonError::UserDefError),
106 ))),
107
108 ffi::WasmEdge_ErrCode_IllegalPath => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
110 CoreLoadError::IllegalPath,
111 )))),
112 ffi::WasmEdge_ErrCode_ReadError => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
113 CoreLoadError::ReadError,
114 )))),
115 ffi::WasmEdge_ErrCode_UnexpectedEnd => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
116 CoreLoadError::UnexpectedEnd,
117 )))),
118 ffi::WasmEdge_ErrCode_MalformedMagic => Err(Box::new(WasmEdgeError::Core(
119 CoreError::Load(CoreLoadError::MalformedMagic),
120 ))),
121 ffi::WasmEdge_ErrCode_MalformedVersion => Err(Box::new(WasmEdgeError::Core(
122 CoreError::Load(CoreLoadError::MalformedVersion),
123 ))),
124 ffi::WasmEdge_ErrCode_MalformedSection => Err(Box::new(WasmEdgeError::Core(
125 CoreError::Load(CoreLoadError::MalformedSection),
126 ))),
127 ffi::WasmEdge_ErrCode_SectionSizeMismatch => Err(Box::new(WasmEdgeError::Core(
128 CoreError::Load(CoreLoadError::SectionSizeMismatch),
129 ))),
130 ffi::WasmEdge_ErrCode_LengthOutOfBounds => Err(Box::new(WasmEdgeError::Core(
131 CoreError::Load(CoreLoadError::LengthOutOfBounds),
132 ))),
133 ffi::WasmEdge_ErrCode_JunkSection => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
134 CoreLoadError::JunkSection,
135 )))),
136 ffi::WasmEdge_ErrCode_IncompatibleFuncCode => Err(Box::new(WasmEdgeError::Core(
137 CoreError::Load(CoreLoadError::IncompatibleFuncCode),
138 ))),
139 ffi::WasmEdge_ErrCode_IncompatibleDataCount => Err(Box::new(WasmEdgeError::Core(
140 CoreError::Load(CoreLoadError::IncompatibleDataCount),
141 ))),
142 ffi::WasmEdge_ErrCode_DataCountRequired => Err(Box::new(WasmEdgeError::Core(
143 CoreError::Load(CoreLoadError::DataCountRequired),
144 ))),
145 ffi::WasmEdge_ErrCode_MalformedImportKind => Err(Box::new(WasmEdgeError::Core(
146 CoreError::Load(CoreLoadError::MalformedImportKind),
147 ))),
148 ffi::WasmEdge_ErrCode_MalformedExportKind => Err(Box::new(WasmEdgeError::Core(
149 CoreError::Load(CoreLoadError::MalformedExportKind),
150 ))),
151 ffi::WasmEdge_ErrCode_ExpectedZeroByte => Err(Box::new(WasmEdgeError::Core(
152 CoreError::Load(CoreLoadError::ExpectedZeroByte),
153 ))),
154 ffi::WasmEdge_ErrCode_InvalidMut => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
155 CoreLoadError::InvalidMut,
156 )))),
157 ffi::WasmEdge_ErrCode_TooManyLocals => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
158 CoreLoadError::TooManyLocals,
159 )))),
160 ffi::WasmEdge_ErrCode_MalformedValType => Err(Box::new(WasmEdgeError::Core(
161 CoreError::Load(CoreLoadError::MalformedValType),
162 ))),
163 ffi::WasmEdge_ErrCode_MalformedElemType => Err(Box::new(WasmEdgeError::Core(
164 CoreError::Load(CoreLoadError::MalformedElemType),
165 ))),
166 ffi::WasmEdge_ErrCode_MalformedRefType => Err(Box::new(WasmEdgeError::Core(
167 CoreError::Load(CoreLoadError::MalformedRefType),
168 ))),
169 ffi::WasmEdge_ErrCode_MalformedUTF8 => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
170 CoreLoadError::MalformedUTF8,
171 )))),
172 ffi::WasmEdge_ErrCode_IntegerTooLarge => Err(Box::new(WasmEdgeError::Core(
173 CoreError::Load(CoreLoadError::IntegerTooLarge),
174 ))),
175 ffi::WasmEdge_ErrCode_IntegerTooLong => Err(Box::new(WasmEdgeError::Core(
176 CoreError::Load(CoreLoadError::IntegerTooLong),
177 ))),
178 ffi::WasmEdge_ErrCode_IllegalOpCode => Err(Box::new(WasmEdgeError::Core(CoreError::Load(
179 CoreLoadError::IllegalOpCode,
180 )))),
181 ffi::WasmEdge_ErrCode_IllegalGrammar => Err(Box::new(WasmEdgeError::Core(
182 CoreError::Load(CoreLoadError::IllegalGrammar),
183 ))),
184 ffi::WasmEdge_ErrCode_SharedMemoryNoMax => Err(Box::new(WasmEdgeError::Core(
185 CoreError::Load(CoreLoadError::SharedMemoryNoMax),
186 ))),
187 ffi::WasmEdge_ErrCode_IntrinsicsTableNotFound => Err(Box::new(WasmEdgeError::Core(
188 CoreError::Load(CoreLoadError::IntrinsicsTableNotFound),
189 ))),
190 ffi::WasmEdge_ErrCode_MalformedTable => Err(Box::new(WasmEdgeError::Core(
191 CoreError::Load(CoreLoadError::MalformedTable),
192 ))),
193
194 ffi::WasmEdge_ErrCode_InvalidAlignment => Err(Box::new(WasmEdgeError::Core(
196 CoreError::Validation(CoreValidationError::InvalidAlignment),
197 ))),
198 ffi::WasmEdge_ErrCode_TypeCheckFailed => Err(Box::new(WasmEdgeError::Core(
199 CoreError::Validation(CoreValidationError::TypeCheckFailed),
200 ))),
201 ffi::WasmEdge_ErrCode_InvalidLabelIdx => Err(Box::new(WasmEdgeError::Core(
202 CoreError::Validation(CoreValidationError::InvalidLabelIdx),
203 ))),
204 ffi::WasmEdge_ErrCode_InvalidLocalIdx => Err(Box::new(WasmEdgeError::Core(
205 CoreError::Validation(CoreValidationError::InvalidLocalIdx),
206 ))),
207 ffi::WasmEdge_ErrCode_InvalidFieldIdx => Err(Box::new(WasmEdgeError::Core(
208 CoreError::Validation(CoreValidationError::InvalidFieldIdx),
209 ))),
210 ffi::WasmEdge_ErrCode_InvalidFuncTypeIdx => Err(Box::new(WasmEdgeError::Core(
211 CoreError::Validation(CoreValidationError::InvalidFuncTypeIdx),
212 ))),
213 ffi::WasmEdge_ErrCode_InvalidFuncIdx => Err(Box::new(WasmEdgeError::Core(
214 CoreError::Validation(CoreValidationError::InvalidFuncIdx),
215 ))),
216 ffi::WasmEdge_ErrCode_InvalidTableIdx => Err(Box::new(WasmEdgeError::Core(
217 CoreError::Validation(CoreValidationError::InvalidTableIdx),
218 ))),
219 ffi::WasmEdge_ErrCode_InvalidMemoryIdx => Err(Box::new(WasmEdgeError::Core(
220 CoreError::Validation(CoreValidationError::InvalidMemoryIdx),
221 ))),
222 ffi::WasmEdge_ErrCode_InvalidGlobalIdx => Err(Box::new(WasmEdgeError::Core(
223 CoreError::Validation(CoreValidationError::InvalidGlobalIdx),
224 ))),
225 ffi::WasmEdge_ErrCode_InvalidElemIdx => Err(Box::new(WasmEdgeError::Core(
226 CoreError::Validation(CoreValidationError::InvalidElemIdx),
227 ))),
228 ffi::WasmEdge_ErrCode_InvalidDataIdx => Err(Box::new(WasmEdgeError::Core(
229 CoreError::Validation(CoreValidationError::InvalidDataIdx),
230 ))),
231 ffi::WasmEdge_ErrCode_InvalidRefIdx => Err(Box::new(WasmEdgeError::Core(
232 CoreError::Validation(CoreValidationError::InvalidRefIdx),
233 ))),
234 ffi::WasmEdge_ErrCode_ConstExprRequired => Err(Box::new(WasmEdgeError::Core(
235 CoreError::Validation(CoreValidationError::ConstExprRequired),
236 ))),
237 ffi::WasmEdge_ErrCode_DupExportName => Err(Box::new(WasmEdgeError::Core(
238 CoreError::Validation(CoreValidationError::DupExportName),
239 ))),
240 ffi::WasmEdge_ErrCode_ImmutableGlobal => Err(Box::new(WasmEdgeError::Core(
241 CoreError::Validation(CoreValidationError::ImmutableGlobal),
242 ))),
243 ffi::WasmEdge_ErrCode_ImmutableField => Err(Box::new(WasmEdgeError::Core(
244 CoreError::Validation(CoreValidationError::ImmutableField),
245 ))),
246 ffi::WasmEdge_ErrCode_ImmutableArray => Err(Box::new(WasmEdgeError::Core(
247 CoreError::Validation(CoreValidationError::ImmutableArray),
248 ))),
249 ffi::WasmEdge_ErrCode_InvalidResultArity => Err(Box::new(WasmEdgeError::Core(
250 CoreError::Validation(CoreValidationError::InvalidResultArity),
251 ))),
252 ffi::WasmEdge_ErrCode_MultiTables => Err(Box::new(WasmEdgeError::Core(
253 CoreError::Validation(CoreValidationError::MultiTables),
254 ))),
255 ffi::WasmEdge_ErrCode_MultiMemories => Err(Box::new(WasmEdgeError::Core(
256 CoreError::Validation(CoreValidationError::MultiMemories),
257 ))),
258 ffi::WasmEdge_ErrCode_InvalidLimit => Err(Box::new(WasmEdgeError::Core(
259 CoreError::Validation(CoreValidationError::InvalidLimit),
260 ))),
261 ffi::WasmEdge_ErrCode_InvalidMemPages => Err(Box::new(WasmEdgeError::Core(
262 CoreError::Validation(CoreValidationError::InvalidMemPages),
263 ))),
264 ffi::WasmEdge_ErrCode_InvalidStartFunc => Err(Box::new(WasmEdgeError::Core(
265 CoreError::Validation(CoreValidationError::InvalidStartFunc),
266 ))),
267 ffi::WasmEdge_ErrCode_InvalidLaneIdx => Err(Box::new(WasmEdgeError::Core(
268 CoreError::Validation(CoreValidationError::InvalidLaneIdx),
269 ))),
270 ffi::WasmEdge_ErrCode_InvalidUninitLocal => Err(Box::new(WasmEdgeError::Core(
271 CoreError::Validation(CoreValidationError::InvalidUninitLocal),
272 ))),
273 ffi::WasmEdge_ErrCode_InvalidNotDefaultableField => Err(Box::new(WasmEdgeError::Core(
274 CoreError::Validation(CoreValidationError::InvalidNotDefaultableField),
275 ))),
276 ffi::WasmEdge_ErrCode_InvalidNotDefaultableArray => Err(Box::new(WasmEdgeError::Core(
277 CoreError::Validation(CoreValidationError::InvalidNotDefaultableArray),
278 ))),
279 ffi::WasmEdge_ErrCode_InvalidPackedField => Err(Box::new(WasmEdgeError::Core(
280 CoreError::Validation(CoreValidationError::InvalidPackedField),
281 ))),
282 ffi::WasmEdge_ErrCode_InvalidPackedArray => Err(Box::new(WasmEdgeError::Core(
283 CoreError::Validation(CoreValidationError::InvalidPackedArray),
284 ))),
285 ffi::WasmEdge_ErrCode_InvalidUnpackedField => Err(Box::new(WasmEdgeError::Core(
286 CoreError::Validation(CoreValidationError::InvalidUnpackedField),
287 ))),
288 ffi::WasmEdge_ErrCode_InvalidUnpackedArray => Err(Box::new(WasmEdgeError::Core(
289 CoreError::Validation(CoreValidationError::InvalidUnpackedArray),
290 ))),
291 ffi::WasmEdge_ErrCode_InvalidBrRefType => Err(Box::new(WasmEdgeError::Core(
292 CoreError::Validation(CoreValidationError::InvalidBrRefType),
293 ))),
294 ffi::WasmEdge_ErrCode_ArrayTypesMismatch => Err(Box::new(WasmEdgeError::Core(
295 CoreError::Validation(CoreValidationError::ArrayTypesMismatch),
296 ))),
297 ffi::WasmEdge_ErrCode_ArrayTypesNumtypeRequired => Err(Box::new(WasmEdgeError::Core(
298 CoreError::Validation(CoreValidationError::ArrayTypesNumtypeRequired),
299 ))),
300 ffi::WasmEdge_ErrCode_InvalidSubType => Err(Box::new(WasmEdgeError::Core(
301 CoreError::Validation(CoreValidationError::InvalidSubType),
302 ))),
303
304 ffi::WasmEdge_ErrCode_ModuleNameConflict => Err(Box::new(WasmEdgeError::Core(
306 CoreError::Instantiation(CoreInstantiationError::ModuleNameConflict),
307 ))),
308 ffi::WasmEdge_ErrCode_IncompatibleImportType => Err(Box::new(WasmEdgeError::Core(
309 CoreError::Instantiation(CoreInstantiationError::IncompatibleImportType),
310 ))),
311 ffi::WasmEdge_ErrCode_UnknownImport => Err(Box::new(WasmEdgeError::Core(
312 CoreError::Instantiation(CoreInstantiationError::UnknownImport),
313 ))),
314 ffi::WasmEdge_ErrCode_DataSegDoesNotFit => Err(Box::new(WasmEdgeError::Core(
315 CoreError::Instantiation(CoreInstantiationError::DataSegDoesNotFit),
316 ))),
317 ffi::WasmEdge_ErrCode_ElemSegDoesNotFit => Err(Box::new(WasmEdgeError::Core(
318 CoreError::Instantiation(CoreInstantiationError::ElemSegDoesNotFit),
319 ))),
320
321 ffi::WasmEdge_ErrCode_WrongInstanceAddress => Err(Box::new(WasmEdgeError::Core(
323 CoreError::Execution(CoreExecutionError::WrongInstanceAddress),
324 ))),
325 ffi::WasmEdge_ErrCode_WrongInstanceIndex => Err(Box::new(WasmEdgeError::Core(
326 CoreError::Execution(CoreExecutionError::WrongInstanceIndex),
327 ))),
328 ffi::WasmEdge_ErrCode_InstrTypeMismatch => Err(Box::new(WasmEdgeError::Core(
329 CoreError::Execution(CoreExecutionError::InstrTypeMismatch),
330 ))),
331 ffi::WasmEdge_ErrCode_FuncSigMismatch => Err(Box::new(WasmEdgeError::Core(
332 CoreError::Execution(CoreExecutionError::FuncSigMismatch),
333 ))),
334 ffi::WasmEdge_ErrCode_DivideByZero => Err(Box::new(WasmEdgeError::Core(
335 CoreError::Execution(CoreExecutionError::DivideByZero),
336 ))),
337 ffi::WasmEdge_ErrCode_IntegerOverflow => Err(Box::new(WasmEdgeError::Core(
338 CoreError::Execution(CoreExecutionError::IntegerOverflow),
339 ))),
340 ffi::WasmEdge_ErrCode_InvalidConvToInt => Err(Box::new(WasmEdgeError::Core(
341 CoreError::Execution(CoreExecutionError::InvalidConvToInt),
342 ))),
343 ffi::WasmEdge_ErrCode_TableOutOfBounds => Err(Box::new(WasmEdgeError::Core(
344 CoreError::Execution(CoreExecutionError::TableOutOfBounds),
345 ))),
346 ffi::WasmEdge_ErrCode_MemoryOutOfBounds => Err(Box::new(WasmEdgeError::Core(
347 CoreError::Execution(CoreExecutionError::MemoryOutOfBounds),
348 ))),
349 ffi::WasmEdge_ErrCode_ArrayOutOfBounds => Err(Box::new(WasmEdgeError::Core(
350 CoreError::Execution(CoreExecutionError::ArrayOutOfBounds),
351 ))),
352 ffi::WasmEdge_ErrCode_Unreachable => Err(Box::new(WasmEdgeError::Core(
353 CoreError::Execution(CoreExecutionError::Unreachable),
354 ))),
355 ffi::WasmEdge_ErrCode_UninitializedElement => Err(Box::new(WasmEdgeError::Core(
356 CoreError::Execution(CoreExecutionError::UninitializedElement),
357 ))),
358 ffi::WasmEdge_ErrCode_UndefinedElement => Err(Box::new(WasmEdgeError::Core(
359 CoreError::Execution(CoreExecutionError::UndefinedElement),
360 ))),
361 ffi::WasmEdge_ErrCode_IndirectCallTypeMismatch => Err(Box::new(WasmEdgeError::Core(
362 CoreError::Execution(CoreExecutionError::IndirectCallTypeMismatch),
363 ))),
364 ffi::WasmEdge_ErrCode_HostFuncError => Err(Box::new(WasmEdgeError::Core(
365 CoreError::Execution(CoreExecutionError::HostFuncFailed),
366 ))),
367 ffi::WasmEdge_ErrCode_RefTypeMismatch => Err(Box::new(WasmEdgeError::Core(
368 CoreError::Execution(CoreExecutionError::RefTypeMismatch),
369 ))),
370 ffi::WasmEdge_ErrCode_UnalignedAtomicAccess => Err(Box::new(WasmEdgeError::Core(
371 CoreError::Execution(CoreExecutionError::UnalignedAtomicAccess),
372 ))),
373 ffi::WasmEdge_ErrCode_ExpectSharedMemory => Err(Box::new(WasmEdgeError::Core(
374 CoreError::Execution(CoreExecutionError::ExpectSharedMemory),
375 ))),
376 ffi::WasmEdge_ErrCode_CastNullToNonNull => Err(Box::new(WasmEdgeError::Core(
377 CoreError::Execution(CoreExecutionError::CastNullToNonNull),
378 ))),
379 ffi::WasmEdge_ErrCode_AccessNullFunc => Err(Box::new(WasmEdgeError::Core(
380 CoreError::Execution(CoreExecutionError::AccessNullFunc),
381 ))),
382 ffi::WasmEdge_ErrCode_AccessNullStruct => Err(Box::new(WasmEdgeError::Core(
383 CoreError::Execution(CoreExecutionError::AccessNullStruct),
384 ))),
385 ffi::WasmEdge_ErrCode_AccessNullArray => Err(Box::new(WasmEdgeError::Core(
386 CoreError::Execution(CoreExecutionError::AccessNullArray),
387 ))),
388 ffi::WasmEdge_ErrCode_AccessNullI31 => Err(Box::new(WasmEdgeError::Core(
389 CoreError::Execution(CoreExecutionError::AccessNullI31),
390 ))),
391 ffi::WasmEdge_ErrCode_CastFailed => Err(Box::new(WasmEdgeError::Core(
392 CoreError::Execution(CoreExecutionError::CastFailed),
393 ))),
394
395 ffi::WasmEdge_ErrCode_MalformedSort => Err(Box::new(WasmEdgeError::Core(
397 CoreError::Component(CoreComponentError::MalformedSort),
398 ))),
399 ffi::WasmEdge_ErrCode_MalformedAliasTarget => Err(Box::new(WasmEdgeError::Core(
400 CoreError::Component(CoreComponentError::MalformedAliasTarget),
401 ))),
402 ffi::WasmEdge_ErrCode_MalformedCoreInstance => Err(Box::new(WasmEdgeError::Core(
403 CoreError::Component(CoreComponentError::MalformedCoreInstance),
404 ))),
405 ffi::WasmEdge_ErrCode_MalformedInstance => Err(Box::new(WasmEdgeError::Core(
406 CoreError::Component(CoreComponentError::MalformedInstance),
407 ))),
408 ffi::WasmEdge_ErrCode_MalformedDefType => Err(Box::new(WasmEdgeError::Core(
409 CoreError::Component(CoreComponentError::MalformedDefType),
410 ))),
411 ffi::WasmEdge_ErrCode_MalformedRecordType => Err(Box::new(WasmEdgeError::Core(
412 CoreError::Component(CoreComponentError::MalformedRecordType),
413 ))),
414 ffi::WasmEdge_ErrCode_MalformedVariantType => Err(Box::new(WasmEdgeError::Core(
415 CoreError::Component(CoreComponentError::MalformedVariantType),
416 ))),
417 ffi::WasmEdge_ErrCode_MalformedTupleType => Err(Box::new(WasmEdgeError::Core(
418 CoreError::Component(CoreComponentError::MalformedTupleType),
419 ))),
420 ffi::WasmEdge_ErrCode_MalformedFlagsType => Err(Box::new(WasmEdgeError::Core(
421 CoreError::Component(CoreComponentError::MalformedFlagsType),
422 ))),
423 ffi::WasmEdge_ErrCode_MalformedCanonical => Err(Box::new(WasmEdgeError::Core(
424 CoreError::Component(CoreComponentError::MalformedCanonical),
425 ))),
426 ffi::WasmEdge_ErrCode_UnknownCanonicalOption => Err(Box::new(WasmEdgeError::Core(
427 CoreError::Component(CoreComponentError::UnknownCanonicalOption),
428 ))),
429 ffi::WasmEdge_ErrCode_MalformedName => Err(Box::new(WasmEdgeError::Core(
430 CoreError::Component(CoreComponentError::MalformedName),
431 ))),
432 c => Err(Box::new(WasmEdgeError::Core(CoreError::UnknownError(
433 c as _,
434 )))),
435 }
436}
437
438impl From<CoreError> for WasmEdge_Result {
439 fn from(val: CoreError) -> WasmEdge_Result {
440 let code = match val {
441 CoreError::Common(e) => match e {
443 CoreCommonError::Terminated => ffi::WasmEdge_ErrCode_Terminated,
444 CoreCommonError::RuntimeError => ffi::WasmEdge_ErrCode_RuntimeError,
445 CoreCommonError::CostLimitExceeded => ffi::WasmEdge_ErrCode_CostLimitExceeded,
446 CoreCommonError::WrongVMWorkflow => ffi::WasmEdge_ErrCode_WrongVMWorkflow,
447 CoreCommonError::FuncNotFound => ffi::WasmEdge_ErrCode_FuncNotFound,
448 CoreCommonError::AOTDisabled => ffi::WasmEdge_ErrCode_AOTDisabled,
449 CoreCommonError::Interrupted => ffi::WasmEdge_ErrCode_Interrupted,
450 CoreCommonError::UserDefError => ffi::WasmEdge_ErrCode_UserDefError,
451 CoreCommonError::NotValidated => ffi::WasmEdge_ErrCode_NotValidated,
452 CoreCommonError::NonNullRequired => ffi::WasmEdge_ErrCode_NonNullRequired,
453 CoreCommonError::SetValueToConst => ffi::WasmEdge_ErrCode_SetValueToConst,
454 CoreCommonError::SetValueErrorType => ffi::WasmEdge_ErrCode_SetValueErrorType,
455 },
456
457 CoreError::Load(e) => match e {
459 CoreLoadError::IllegalPath => ffi::WasmEdge_ErrCode_IllegalPath,
460 CoreLoadError::ReadError => ffi::WasmEdge_ErrCode_ReadError,
461 CoreLoadError::UnexpectedEnd => ffi::WasmEdge_ErrCode_UnexpectedEnd,
462 CoreLoadError::MalformedMagic => ffi::WasmEdge_ErrCode_MalformedMagic,
463 CoreLoadError::MalformedVersion => ffi::WasmEdge_ErrCode_MalformedVersion,
464 CoreLoadError::MalformedSection => ffi::WasmEdge_ErrCode_MalformedSection,
465 CoreLoadError::SectionSizeMismatch => ffi::WasmEdge_ErrCode_SectionSizeMismatch,
466 CoreLoadError::LengthOutOfBounds => ffi::WasmEdge_ErrCode_LengthOutOfBounds,
467 CoreLoadError::JunkSection => ffi::WasmEdge_ErrCode_JunkSection,
468 CoreLoadError::IncompatibleFuncCode => ffi::WasmEdge_ErrCode_IncompatibleFuncCode,
469 CoreLoadError::IncompatibleDataCount => ffi::WasmEdge_ErrCode_IncompatibleDataCount,
470 CoreLoadError::DataCountRequired => ffi::WasmEdge_ErrCode_DataCountRequired,
471 CoreLoadError::MalformedImportKind => ffi::WasmEdge_ErrCode_MalformedImportKind,
472 CoreLoadError::MalformedExportKind => ffi::WasmEdge_ErrCode_MalformedExportKind,
473 CoreLoadError::ExpectedZeroByte => ffi::WasmEdge_ErrCode_ExpectedZeroByte,
474 CoreLoadError::InvalidMut => ffi::WasmEdge_ErrCode_InvalidMut,
475 CoreLoadError::TooManyLocals => ffi::WasmEdge_ErrCode_TooManyLocals,
476 CoreLoadError::MalformedValType => ffi::WasmEdge_ErrCode_MalformedValType,
477 CoreLoadError::MalformedElemType => ffi::WasmEdge_ErrCode_MalformedElemType,
478 CoreLoadError::MalformedRefType => ffi::WasmEdge_ErrCode_MalformedRefType,
479 CoreLoadError::MalformedUTF8 => ffi::WasmEdge_ErrCode_MalformedUTF8,
480 CoreLoadError::IntegerTooLarge => ffi::WasmEdge_ErrCode_IntegerTooLarge,
481 CoreLoadError::IntegerTooLong => ffi::WasmEdge_ErrCode_IntegerTooLong,
482 CoreLoadError::IllegalOpCode => ffi::WasmEdge_ErrCode_IllegalOpCode,
483 CoreLoadError::IllegalGrammar => ffi::WasmEdge_ErrCode_IllegalGrammar,
484 CoreLoadError::SharedMemoryNoMax => ffi::WasmEdge_ErrCode_SharedMemoryNoMax,
485 CoreLoadError::IntrinsicsTableNotFound => {
486 ffi::WasmEdge_ErrCode_IntrinsicsTableNotFound
487 }
488 CoreLoadError::MalformedTable => ffi::WasmEdge_ErrCode_MalformedTable,
489 },
490
491 CoreError::Validation(e) => match e {
493 CoreValidationError::InvalidAlignment => ffi::WasmEdge_ErrCode_InvalidAlignment,
494 CoreValidationError::TypeCheckFailed => ffi::WasmEdge_ErrCode_TypeCheckFailed,
495 CoreValidationError::InvalidLabelIdx => ffi::WasmEdge_ErrCode_InvalidLabelIdx,
496 CoreValidationError::InvalidLocalIdx => ffi::WasmEdge_ErrCode_InvalidLocalIdx,
497 CoreValidationError::InvalidFieldIdx => ffi::WasmEdge_ErrCode_InvalidFieldIdx,
498 CoreValidationError::InvalidFuncTypeIdx => ffi::WasmEdge_ErrCode_InvalidFuncTypeIdx,
499 CoreValidationError::InvalidFuncIdx => ffi::WasmEdge_ErrCode_InvalidFuncIdx,
500 CoreValidationError::InvalidTableIdx => ffi::WasmEdge_ErrCode_InvalidTableIdx,
501 CoreValidationError::InvalidMemoryIdx => ffi::WasmEdge_ErrCode_InvalidMemoryIdx,
502 CoreValidationError::InvalidGlobalIdx => ffi::WasmEdge_ErrCode_InvalidGlobalIdx,
503 CoreValidationError::InvalidElemIdx => ffi::WasmEdge_ErrCode_InvalidElemIdx,
504 CoreValidationError::InvalidDataIdx => ffi::WasmEdge_ErrCode_InvalidDataIdx,
505 CoreValidationError::InvalidRefIdx => ffi::WasmEdge_ErrCode_InvalidRefIdx,
506 CoreValidationError::ConstExprRequired => ffi::WasmEdge_ErrCode_ConstExprRequired,
507 CoreValidationError::DupExportName => ffi::WasmEdge_ErrCode_DupExportName,
508 CoreValidationError::ImmutableGlobal => ffi::WasmEdge_ErrCode_ImmutableGlobal,
509 CoreValidationError::ImmutableField => ffi::WasmEdge_ErrCode_ImmutableField,
510 CoreValidationError::ImmutableArray => ffi::WasmEdge_ErrCode_ImmutableArray,
511 CoreValidationError::InvalidResultArity => ffi::WasmEdge_ErrCode_InvalidResultArity,
512 CoreValidationError::MultiTables => ffi::WasmEdge_ErrCode_MultiTables,
513 CoreValidationError::MultiMemories => ffi::WasmEdge_ErrCode_MultiMemories,
514 CoreValidationError::InvalidLimit => ffi::WasmEdge_ErrCode_InvalidLimit,
515 CoreValidationError::InvalidMemPages => ffi::WasmEdge_ErrCode_InvalidMemPages,
516 CoreValidationError::InvalidStartFunc => ffi::WasmEdge_ErrCode_InvalidStartFunc,
517 CoreValidationError::InvalidLaneIdx => ffi::WasmEdge_ErrCode_InvalidLaneIdx,
518 CoreValidationError::InvalidUninitLocal => ffi::WasmEdge_ErrCode_InvalidUninitLocal,
519 CoreValidationError::InvalidNotDefaultableField => {
520 ffi::WasmEdge_ErrCode_InvalidNotDefaultableField
521 }
522 CoreValidationError::InvalidNotDefaultableArray => {
523 ffi::WasmEdge_ErrCode_InvalidNotDefaultableArray
524 }
525 CoreValidationError::InvalidPackedField => ffi::WasmEdge_ErrCode_InvalidPackedField,
526 CoreValidationError::InvalidPackedArray => ffi::WasmEdge_ErrCode_InvalidPackedArray,
527 CoreValidationError::InvalidUnpackedField => {
528 ffi::WasmEdge_ErrCode_InvalidUnpackedField
529 }
530 CoreValidationError::InvalidUnpackedArray => {
531 ffi::WasmEdge_ErrCode_InvalidUnpackedArray
532 }
533 CoreValidationError::InvalidBrRefType => ffi::WasmEdge_ErrCode_InvalidBrRefType,
534 CoreValidationError::ArrayTypesMismatch => ffi::WasmEdge_ErrCode_ArrayTypesMismatch,
535 CoreValidationError::ArrayTypesNumtypeRequired => {
536 ffi::WasmEdge_ErrCode_ArrayTypesNumtypeRequired
537 }
538 CoreValidationError::InvalidSubType => ffi::WasmEdge_ErrCode_InvalidSubType,
539 },
540
541 CoreError::Instantiation(e) => match e {
543 CoreInstantiationError::ModuleNameConflict => {
544 ffi::WasmEdge_ErrCode_ModuleNameConflict
545 }
546 CoreInstantiationError::IncompatibleImportType => {
547 ffi::WasmEdge_ErrCode_IncompatibleImportType
548 }
549 CoreInstantiationError::UnknownImport => ffi::WasmEdge_ErrCode_UnknownImport,
550 CoreInstantiationError::DataSegDoesNotFit => {
551 ffi::WasmEdge_ErrCode_DataSegDoesNotFit
552 }
553 CoreInstantiationError::ElemSegDoesNotFit => {
554 ffi::WasmEdge_ErrCode_ElemSegDoesNotFit
555 }
556 },
557
558 CoreError::Execution(e) => match e {
560 CoreExecutionError::WrongInstanceAddress => {
561 ffi::WasmEdge_ErrCode_WrongInstanceAddress
562 }
563 CoreExecutionError::WrongInstanceIndex => ffi::WasmEdge_ErrCode_WrongInstanceIndex,
564 CoreExecutionError::InstrTypeMismatch => ffi::WasmEdge_ErrCode_InstrTypeMismatch,
565 CoreExecutionError::FuncSigMismatch => ffi::WasmEdge_ErrCode_FuncSigMismatch,
566 CoreExecutionError::DivideByZero => ffi::WasmEdge_ErrCode_DivideByZero,
567 CoreExecutionError::IntegerOverflow => ffi::WasmEdge_ErrCode_IntegerOverflow,
568 CoreExecutionError::InvalidConvToInt => ffi::WasmEdge_ErrCode_InvalidConvToInt,
569 CoreExecutionError::TableOutOfBounds => ffi::WasmEdge_ErrCode_TableOutOfBounds,
570 CoreExecutionError::MemoryOutOfBounds => ffi::WasmEdge_ErrCode_MemoryOutOfBounds,
571 CoreExecutionError::ArrayOutOfBounds => ffi::WasmEdge_ErrCode_ArrayOutOfBounds,
572 CoreExecutionError::Unreachable => ffi::WasmEdge_ErrCode_Unreachable,
573 CoreExecutionError::UninitializedElement => {
574 ffi::WasmEdge_ErrCode_UninitializedElement
575 }
576 CoreExecutionError::UndefinedElement => ffi::WasmEdge_ErrCode_UndefinedElement,
577 CoreExecutionError::IndirectCallTypeMismatch => {
578 ffi::WasmEdge_ErrCode_IndirectCallTypeMismatch
579 }
580 CoreExecutionError::HostFuncFailed => ffi::WasmEdge_ErrCode_HostFuncError,
581 CoreExecutionError::RefTypeMismatch => ffi::WasmEdge_ErrCode_RefTypeMismatch,
582 CoreExecutionError::UnalignedAtomicAccess => {
583 ffi::WasmEdge_ErrCode_UnalignedAtomicAccess
584 }
585 CoreExecutionError::ExpectSharedMemory => ffi::WasmEdge_ErrCode_ExpectSharedMemory,
586 CoreExecutionError::CastNullToNonNull => ffi::WasmEdge_ErrCode_CastNullToNonNull,
587 CoreExecutionError::AccessNullFunc => ffi::WasmEdge_ErrCode_AccessNullFunc,
588 CoreExecutionError::AccessNullStruct => ffi::WasmEdge_ErrCode_AccessNullStruct,
589 CoreExecutionError::AccessNullArray => ffi::WasmEdge_ErrCode_AccessNullArray,
590 CoreExecutionError::AccessNullI31 => ffi::WasmEdge_ErrCode_AccessNullI31,
591 CoreExecutionError::CastFailed => ffi::WasmEdge_ErrCode_CastFailed,
592 },
593
594 CoreError::Component(e) => match e {
595 CoreComponentError::MalformedSort => ffi::WasmEdge_ErrCode_MalformedSort,
596 CoreComponentError::MalformedAliasTarget => {
597 ffi::WasmEdge_ErrCode_MalformedAliasTarget
598 }
599 CoreComponentError::MalformedCoreInstance => {
600 ffi::WasmEdge_ErrCode_MalformedCoreInstance
601 }
602 CoreComponentError::MalformedInstance => ffi::WasmEdge_ErrCode_MalformedInstance,
603 CoreComponentError::MalformedDefType => ffi::WasmEdge_ErrCode_MalformedDefType,
604 CoreComponentError::MalformedRecordType => {
605 ffi::WasmEdge_ErrCode_MalformedRecordType
606 }
607 CoreComponentError::MalformedVariantType => {
608 ffi::WasmEdge_ErrCode_MalformedVariantType
609 }
610 CoreComponentError::MalformedTupleType => ffi::WasmEdge_ErrCode_MalformedTupleType,
611 CoreComponentError::MalformedFlagsType => ffi::WasmEdge_ErrCode_MalformedFlagsType,
612 CoreComponentError::MalformedCanonical => ffi::WasmEdge_ErrCode_MalformedCanonical,
613 CoreComponentError::UnknownCanonicalOption => {
614 ffi::WasmEdge_ErrCode_UnknownCanonicalOption
615 }
616 CoreComponentError::MalformedName => ffi::WasmEdge_ErrCode_MalformedName,
617 },
618 CoreError::UnknownError(c) => c as ffi::WasmEdge_ErrCode,
619 };
620 unsafe { ffi::WasmEdge_ResultGen(ffi::WasmEdge_ErrCategory_WASM, code as _) }
621 }
622}
623
624pub fn version_major_value() -> u32 {
626 unsafe { ffi::WasmEdge_VersionGetMajor() }
627}
628
629pub fn version_minor_value() -> u32 {
631 unsafe { ffi::WasmEdge_VersionGetMinor() }
632}
633
634pub fn version_patch_value() -> u32 {
636 unsafe { ffi::WasmEdge_VersionGetPatch() }
637}
638
639pub fn version_string() -> String {
641 unsafe {
642 CStr::from_ptr(ffi::WasmEdge_VersionGet())
643 .to_string_lossy()
644 .into_owned()
645 }
646}
647
648pub fn driver_aot_compiler<I, V>(args: I) -> i32
650where
651 I: IntoIterator<Item = V>,
652 V: AsRef<str>,
653{
654 let args = args
656 .into_iter()
657 .map(|arg| CString::new(arg.as_ref()).unwrap())
658 .collect::<Vec<CString>>();
659
660 let mut c_args = args
662 .iter()
663 .map(|arg| arg.as_ptr())
664 .collect::<Vec<*const std::os::raw::c_char>>();
665
666 unsafe {
667 ffi::WasmEdge_Driver_Compiler(c_args.len() as std::os::raw::c_int, c_args.as_mut_ptr())
668 }
669}
670
671pub fn driver_runtime_tool<I, V>(args: I) -> i32
673where
674 I: IntoIterator<Item = V>,
675 V: AsRef<str>,
676{
677 let args = args
679 .into_iter()
680 .map(|arg| CString::new(arg.as_ref()).unwrap())
681 .collect::<Vec<CString>>();
682
683 let mut c_args = args
685 .iter()
686 .map(|arg| arg.as_ptr())
687 .collect::<Vec<*const std::os::raw::c_char>>();
688
689 unsafe { ffi::WasmEdge_Driver_Tool(c_args.len() as std::os::raw::c_int, c_args.as_mut_ptr()) }
690}
691
692pub fn driver_unified_tool<I, V>(args: I) -> i32
694where
695 I: IntoIterator<Item = V>,
696 V: AsRef<str>,
697{
698 let args = args
700 .into_iter()
701 .map(|arg| CString::new(arg.as_ref()).unwrap())
702 .collect::<Vec<CString>>();
703
704 let mut c_args = args
706 .iter()
707 .map(|arg| arg.as_ptr())
708 .collect::<Vec<*const std::os::raw::c_char>>();
709
710 unsafe {
711 ffi::WasmEdge_Driver_UniTool(c_args.len() as std::os::raw::c_int, c_args.as_mut_ptr())
712 }
713}