MCPcopy Create free account
hub / github.com/bytecodealliance/wit-bindgen / generate_raw_cabi_export

Method generate_raw_cabi_export

crates/rust/src/interface.rs:1220–1287  ·  view source on GitHub ↗
(
        &mut self,
        func: &Function,
        ty: &str,
        path_to_self: &str,
        async_: bool,
    )

Source from the content-addressed store, hash-verified

1218 }
1219
1220 fn generate_raw_cabi_export(
1221 &mut self,
1222 func: &Function,
1223 ty: &str,
1224 path_to_self: &str,
1225 async_: bool,
1226 ) {
1227 let name_snake = func.name.to_snake_case().replace('.', "_");
1228 let wasm_module_export_name = match self.identifier {
1229 Identifier::Interface(_, key) => Some(self.resolve.name_world_key(key)),
1230 Identifier::World(_) => None,
1231 Identifier::StreamOrFuturePayload => unreachable!(),
1232 };
1233 let export_prefix = self.r#gen.opts.export_prefix.as_deref().unwrap_or("");
1234 let export_name = func.legacy_core_export_name(wasm_module_export_name.as_deref());
1235 let export_name = if async_ {
1236 format!("[async-lift]{export_name}")
1237 } else {
1238 export_name.to_string()
1239 };
1240 uwrite!(
1241 self.src,
1242 "\
1243 #[unsafe(export_name = \"{export_prefix}{export_name}\")]
1244 unsafe extern \"C\" fn export_{name_snake}\
1245",
1246 );
1247
1248 let params = self.print_export_sig(func, async_);
1249 self.push_str(" {\n");
1250 uwriteln!(
1251 self.src,
1252 "unsafe {{ {path_to_self}::_export_{name_snake}_cabi::<{ty}>({}) }}",
1253 params.join(", ")
1254 );
1255 self.push_str("}\n");
1256
1257 let export_prefix = self.r#gen.opts.export_prefix.as_deref().unwrap_or("");
1258 if async_ {
1259 uwrite!(
1260 self.src,
1261 "\
1262 #[unsafe(export_name = \"{export_prefix}[callback]{export_name}\")]
1263 unsafe extern \"C\" fn _callback_{name_snake}(event0: u32, event1: u32, event2: u32) -> u32 {{
1264 unsafe {{
1265 {path_to_self}::__callback_{name_snake}(event0, event1, event2)
1266 }}
1267 }}
1268 "
1269 );
1270 } else if abi::guest_export_needs_post_return(self.resolve, func) {
1271 uwrite!(
1272 self.src,
1273 "\
1274 #[unsafe(export_name = \"{export_prefix}cabi_post_{export_name}\")]
1275 unsafe extern \"C\" fn _post_return_{name_snake}\
1276"
1277 );

Callers 1

generate_exportsMethod · 0.80

Calls 5

print_export_sigMethod · 0.80
print_post_return_sigMethod · 0.80
to_stringMethod · 0.45
push_strMethod · 0.45

Tested by

no test coverage detected