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

Method export_funcs

crates/moonbit/src/lib.rs:465–516  ·  view source on GitHub ↗
(
        &mut self,
        resolve: &Resolve,
        world: WorldId,
        funcs: &[(&str, &Function)],
        files: &mut Files,
    )

Source from the content-addressed store, hash-verified

463 }
464
465 fn export_funcs(
466 &mut self,
467 resolve: &Resolve,
468 world: WorldId,
469 funcs: &[(&str, &Function)],
470 files: &mut Files,
471 ) -> Result<()> {
472 let name = format!(
473 "{}.{}",
474 self.opts.r#gen_dir,
475 PkgResolver::world_name(resolve, world)
476 );
477 let mut r#gen = self.interface(resolve, &name, Direction::Export, None);
478
479 for (_, func) in funcs {
480 r#gen.export(func);
481 }
482
483 let fragment = r#gen.finish();
484
485 // Write files
486 {
487 let directory = name.replace('.', "/");
488 // Source
489 let mut src = Source::default();
490 wit_bindgen_core::generated_preamble(&mut src, VERSION);
491 uwriteln!(src, "{}", fragment.src);
492 files.push(&format!("{directory}/top.mbt"), indent(&src).as_bytes());
493
494 if !self.opts.ignore_stub {
495 // moon.pkg.json
496 let mut moon_pkg = Source::default();
497 self.write_moon_pkg(
498 &mut moon_pkg,
499 self.pkg_resolver.package_import.get(&name),
500 false,
501 );
502 files.push(&format!("{directory}/moon.pkg.json"), moon_pkg.as_bytes());
503 }
504
505 // FFI
506 let mut export = Source::default();
507 wit_bindgen_core::generated_preamble(&mut export, VERSION);
508 uwriteln!(&mut export, "{}", fragment.ffi);
509 for b in fragment.builtins.iter() {
510 uwriteln!(&mut export, "{}", b);
511 }
512 files.push(&format!("{directory}/ffi.mbt",), indent(&export).as_bytes());
513 }
514
515 Ok(())
516 }
517
518 fn finish(&mut self, _resolve: &Resolve, _id: WorldId, files: &mut Files) -> Result<()> {
519 // If async is used, export async utils

Callers

nothing calls this directly

Calls 9

generated_preambleFunction · 0.85
write_moon_pkgMethod · 0.80
indentFunction · 0.70
interfaceMethod · 0.45
exportMethod · 0.45
finishMethod · 0.45
pushMethod · 0.45
getMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected