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