wasmer_c_api/wasm_c_api/engine/config/
mod.rs1#[cfg(feature = "sys")]
2pub(crate) mod sys;
3#[cfg(feature = "sys")]
4pub use sys::*;
5
6use crate::wasm_c_api::unstable::target_lexicon::wasmer_target_t;
7
8use super::{wasm_config_t, wasmer_backend_t};
9
10#[cfg(feature = "v8")]
11pub(crate) mod v8;
12
13#[repr(C)]
14#[derive(Debug)]
15pub(crate) enum wasmer_backend_config_kind_t {
16 #[cfg(feature = "sys")]
17 Sys(sys::wasmer_sys_engine_config_t),
18
19 #[cfg(feature = "v8")]
20 V8(v8::wasmer_v8_engine_config_t),
21}
22
23impl Default for wasmer_backend_config_kind_t {
24 fn default() -> Self {
25 match wasmer_backend_t::default() {
26 #[cfg(feature = "llvm")]
27 super::wasmer_backend_t::LLVM => Self::Sys(sys::wasmer_sys_engine_config_t::default()),
28 #[cfg(feature = "cranelift")]
29 super::wasmer_backend_t::CRANELIFT => {
30 Self::Sys(sys::wasmer_sys_engine_config_t::default())
31 }
32 #[cfg(feature = "singlepass")]
33 super::wasmer_backend_t::SINGLEPASS => {
34 Self::Sys(sys::wasmer_sys_engine_config_t::default())
35 }
36 #[cfg(feature = "sys")]
37 super::wasmer_backend_t::HEADLESS => {
38 Self::Sys(sys::wasmer_sys_engine_config_t::default())
39 }
40 #[cfg(feature = "v8")]
41 super::wasmer_backend_t::V8 => Self::V8(v8::wasmer_v8_engine_config_t),
42
43 #[allow(unreachable_patterns)]
44 _ => unreachable!(),
45 }
46 }
47}
48
49#[repr(C)]
50#[derive(Debug, Default)]
51pub(crate) struct wasmer_backend_config_t {
52 pub inner: wasmer_backend_config_kind_t,
53 pub target: Option<Box<wasmer_target_t>>,
54 #[cfg(feature = "middlewares")]
55 pub middlewares: Vec<wasmer_middleware_t>,
56}
57
58#[unsafe(no_mangle)]
98pub extern "C" fn wasm_config_set_target(config: &mut wasm_config_t, target: Box<wasmer_target_t>) {
99 config.backend_config.target = Some(target);
100}
101
102#[unsafe(no_mangle)]
112#[cfg(feature = "middlewares")]
113pub extern "C" fn wasm_config_push_middleware(
114 config: &mut wasm_config_t,
115 middleware: Box<wasmer_middleware_t>,
116) {
117 config.backend_config.middlewares.push(*middleware)
118}