1use crate::wasm_config_t;
2use wasmtime::Engine;
3
4#[repr(C)]
5#[derive(Clone)]
6pub struct wasm_engine_t {
7 pub(crate) engine: Engine,
8}
9
10wasmtime_c_api_macros::declare_own!(wasm_engine_t);
11
12#[unsafe(no_mangle)]
13pub extern "C" fn wasm_engine_new() -> Box<wasm_engine_t> {
14 #[cfg(feature = "logging")]
23 drop(env_logger::try_init());
24
25 Box::new(wasm_engine_t {
26 engine: Engine::default(),
27 })
28}
29
30#[unsafe(no_mangle)]
31pub extern "C" fn wasm_engine_new_with_config(c: Box<wasm_config_t>) -> Box<wasm_engine_t> {
32 #[cfg(feature = "logging")]
33 drop(env_logger::try_init());
34
35 let config = c.config;
36 Box::new(wasm_engine_t {
37 engine: Engine::new(&config).unwrap(),
38 })
39}
40
41#[unsafe(no_mangle)]
42pub extern "C" fn wasmtime_engine_clone(engine: &wasm_engine_t) -> Box<wasm_engine_t> {
43 Box::new(engine.clone())
44}
45
46#[unsafe(no_mangle)]
47pub extern "C" fn wasmtime_engine_increment_epoch(engine: &wasm_engine_t) {
48 engine.engine.increment_epoch();
49}
50
51#[unsafe(no_mangle)]
52pub extern "C" fn wasmtime_engine_is_pulley(engine: &wasm_engine_t) -> bool {
53 engine.engine.is_pulley()
54}