wasmtime_c_api/component/types/
module.rs

1use crate::{CExternType, wasm_engine_t, wasm_exporttype_t, wasm_importtype_t};
2use wasmtime::component::types::Module;
3
4type_wrapper! {
5    pub struct wasmtime_module_type_t {
6        pub(crate) ty: Module,
7    }
8
9    clone: wasmtime_module_type_clone,
10    delete: wasmtime_module_type_delete,
11}
12
13#[unsafe(no_mangle)]
14pub extern "C" fn wasmtime_module_type_import_count(
15    ty: &wasmtime_module_type_t,
16    engine: &wasm_engine_t,
17) -> usize {
18    ty.ty.imports(&engine.engine).len()
19}
20
21#[unsafe(no_mangle)]
22pub extern "C" fn wasmtime_module_type_import_nth<'a>(
23    ty: &'a wasmtime_module_type_t,
24    engine: &wasm_engine_t,
25    nth: usize,
26) -> Option<Box<wasm_importtype_t>> {
27    let ((module, field), item) = ty.ty.imports(&engine.engine).nth(nth)?;
28    Some(Box::new(wasm_importtype_t::new(
29        module.to_string(),
30        field.to_string(),
31        CExternType::new(item),
32    )))
33}
34
35#[unsafe(no_mangle)]
36pub extern "C" fn wasmtime_module_type_export_count(
37    ty: &wasmtime_module_type_t,
38    engine: &wasm_engine_t,
39) -> usize {
40    ty.ty.exports(&engine.engine).len()
41}
42
43#[unsafe(no_mangle)]
44pub extern "C" fn wasmtime_module_type_export_nth<'a>(
45    ty: &'a wasmtime_module_type_t,
46    engine: &wasm_engine_t,
47    nth: usize,
48) -> Option<Box<wasm_exporttype_t>> {
49    let (name, item) = ty.ty.exports(&engine.engine).nth(nth)?;
50    Some(Box::new(wasm_exporttype_t::new(
51        name.to_string(),
52        CExternType::new(item),
53    )))
54}