(
&mut self,
resolve: &Resolve,
world: WorldId,
funcs: &[(&str, &Function)],
files: &mut Files,
)
| 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 |
nothing calls this directly
no test coverage detected