wasmi_c_api/
engine.rs

1use crate::wasm_config_t;
2use alloc::boxed::Box;
3use wasmi::Engine;
4
5/// The Wasm execution engine.
6///
7/// Wraps [`wasmi::Engine`]
8#[repr(C)]
9#[derive(Clone)]
10pub struct wasm_engine_t {
11    pub(crate) inner: Engine,
12}
13
14wasmi_c_api_macros::declare_own!(wasm_engine_t);
15
16/// Creates a new default initialized [`wasm_engine_t`].
17///
18/// The returned [`wasm_engine_t`] must be freed using [`wasm_engine_delete`].
19///
20/// Wraps [`wasmi::Engine::default`].
21#[cfg_attr(not(feature = "prefix-symbols"), no_mangle)]
22#[cfg_attr(feature = "prefix-symbols", wasmi_c_api_macros::prefix_symbol)]
23pub extern "C" fn wasm_engine_new() -> Box<wasm_engine_t> {
24    Box::new(wasm_engine_t {
25        inner: Engine::default(),
26    })
27}
28
29/// Creates a new [`wasm_engine_t`] initialized with a [`wasm_config_t`].
30///
31/// The returned [`wasm_engine_t`] must be freed using [`wasm_engine_delete`].
32///
33/// Wraps [`wasmi::Engine::new`].
34#[cfg_attr(not(feature = "prefix-symbols"), no_mangle)]
35#[cfg_attr(feature = "prefix-symbols", wasmi_c_api_macros::prefix_symbol)]
36pub extern "C" fn wasm_engine_new_with_config(config: Box<wasm_config_t>) -> Box<wasm_engine_t> {
37    Box::new(wasm_engine_t {
38        inner: Engine::new(&config.inner),
39    })
40}
41
42/// Clones a [`wasm_engine_t`].
43///
44/// The cloned [`wasm_engine_t`] has to be freed with [`wasm_engine_delete`] after use.
45///
46/// Wraps [`wasmi::Engine::clone`].
47#[no_mangle]
48pub extern "C" fn wasmi_engine_clone(engine: &wasm_engine_t) -> Box<wasm_engine_t> {
49    Box::new(engine.clone())
50}