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

Method export_interface

crates/moonbit/src/lib.rs:395–463  ·  view source on GitHub ↗
(
        &mut self,
        resolve: &Resolve,
        key: &WorldKey,
        id: InterfaceId,
        files: &mut Files,
    )

Source from the content-addressed store, hash-verified

393 }
394
395 fn export_interface(
396 &mut self,
397 resolve: &Resolve,
398 key: &WorldKey,
399 id: InterfaceId,
400 files: &mut Files,
401 ) -> Result<()> {
402 let name = format!(
403 "{}.{}",
404 self.opts.r#gen_dir,
405 PkgResolver::interface_name(resolve, key)
406 );
407 let name = self.interface_ns.tmp(&name);
408 self.pkg_resolver
409 .export_interface_names
410 .insert(id, name.clone());
411
412 let mut r#gen = self.interface(resolve, &name, Direction::Export, Some(key));
413 r#gen.types(id);
414
415 for (_, func) in resolve.interfaces[id].functions.iter() {
416 r#gen.export(func);
417 }
418
419 let fragment = r#gen.finish();
420
421 // Write files
422 {
423 let directory = name.replace('.', "/");
424
425 // README
426 if let Some(content) = &resolve.interfaces[id].docs.contents
427 && !content.is_empty()
428 {
429 files.push(
430 &format!("{}/README.md", name.replace(".", "/")),
431 content.as_bytes(),
432 );
433 }
434 // Source
435 let mut src = Source::default();
436 wit_bindgen_core::generated_preamble(&mut src, VERSION);
437 uwriteln!(src, "{}", fragment.src);
438 files.push(&format!("{directory}/top.mbt"), indent(&src).as_bytes());
439
440 if !self.opts.ignore_stub {
441 // moon.pkg.json
442 let mut moon_pkg = Source::default();
443 self.write_moon_pkg(
444 &mut moon_pkg,
445 self.pkg_resolver.package_import.get(&name),
446 false,
447 );
448 files.push(&format!("{directory}/moon.pkg.json"), moon_pkg.as_bytes());
449 }
450
451 // FFI
452 let mut ffi = Source::default();

Callers

nothing calls this directly

Calls 13

generated_preambleFunction · 0.85
write_moon_pkgMethod · 0.80
indentFunction · 0.70
tmpMethod · 0.45
insertMethod · 0.45
interfaceMethod · 0.45
typesMethod · 0.45
iterMethod · 0.45
exportMethod · 0.45
finishMethod · 0.45
is_emptyMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected