1 use crate::{wasm_engine_t, wasmtime_component_item_t};
2 use std::mem::MaybeUninit;
3 use wasmtime::component::types::ComponentInstance;
4
5 type_wrapper! {
6 pub struct wasmtime_component_instance_type_t {
7 pub(crate) ty: ComponentInstance,
8 }
9
10 clone: wasmtime_component_instance_type_clone,
11 delete: wasmtime_component_instance_type_delete,
12 }
13
14 #[unsafe(no_mangle)]
wasmtime_component_instance_type_export_count( ty: &wasmtime_component_instance_type_t, engine: &wasm_engine_t, ) -> usize15 pub unsafe extern "C" fn wasmtime_component_instance_type_export_count(
16 ty: &wasmtime_component_instance_type_t,
17 engine: &wasm_engine_t,
18 ) -> usize {
19 ty.ty.exports(&engine.engine).count()
20 }
21
22 #[unsafe(no_mangle)]
wasmtime_component_instance_type_export_get( ty: &wasmtime_component_instance_type_t, engine: &wasm_engine_t, name: *const u8, name_len: usize, ret: &mut MaybeUninit<wasmtime_component_item_t>, ) -> bool23 pub unsafe extern "C" fn wasmtime_component_instance_type_export_get(
24 ty: &wasmtime_component_instance_type_t,
25 engine: &wasm_engine_t,
26 name: *const u8,
27 name_len: usize,
28 ret: &mut MaybeUninit<wasmtime_component_item_t>,
29 ) -> bool {
30 let name = unsafe { std::slice::from_raw_parts(name, name_len) };
31 let Ok(name) = std::str::from_utf8(name) else {
32 return false;
33 };
34 match ty.ty.get_export(&engine.engine, name) {
35 Some(item) => {
36 ret.write(item.into());
37 true
38 }
39 None => false,
40 }
41 }
42
43 #[unsafe(no_mangle)]
wasmtime_component_instance_type_export_nth( ty: &wasmtime_component_instance_type_t, engine: &wasm_engine_t, nth: usize, name_ret: &mut MaybeUninit<*const u8>, name_len_ret: &mut MaybeUninit<usize>, type_ret: &mut MaybeUninit<wasmtime_component_item_t>, ) -> bool44 pub extern "C" fn wasmtime_component_instance_type_export_nth(
45 ty: &wasmtime_component_instance_type_t,
46 engine: &wasm_engine_t,
47 nth: usize,
48 name_ret: &mut MaybeUninit<*const u8>,
49 name_len_ret: &mut MaybeUninit<usize>,
50 type_ret: &mut MaybeUninit<wasmtime_component_item_t>,
51 ) -> bool {
52 match ty.ty.exports(&engine.engine).nth(nth) {
53 Some((name, item)) => {
54 let name: &str = name;
55 name_ret.write(name.as_ptr());
56 name_len_ret.write(name.len());
57 type_ret.write(item.into());
58 true
59 }
60 None => false,
61 }
62 }
63