(
&mut self,
resolve: &Resolve,
key: &WorldKey,
id: InterfaceId,
files: &mut Files,
)
| 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(); |
nothing calls this directly
no test coverage detected