MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / import_interface

Method import_interface

crates/wit-bindgen/src/lib.rs:552–631  ·  view source on GitHub ↗
(
        &mut self,
        resolve: &Resolve,
        name: &WorldKey,
        id: InterfaceId,
        in_world: bool,
    )

Source from the content-addressed store, hash-verified

550 }
551
552 fn import_interface(
553 &mut self,
554 resolve: &Resolve,
555 name: &WorldKey,
556 id: InterfaceId,
557 in_world: bool,
558 ) {
559 let mut generator = InterfaceGenerator::new(self, resolve);
560
561 generator.current_interface = Some((id, name, InterfaceKind::Import));
562 let snake = to_rust_ident(&match name {
563 WorldKey::Name(s) => s.to_snake_case(),
564 WorldKey::Interface(id) => resolve.interfaces[*id]
565 .name
566 .as_ref()
567 .unwrap()
568 .to_snake_case(),
569 });
570 let module = if generator
571 .generator
572 .name_interface(resolve, id, name, InterfaceKind::Import)
573 {
574 // If this interface is remapped then that means that it was
575 // provided via the `with` key in the bindgen configuration.
576 // That means that bindings generation is skipped here. To
577 // accommodate future bindgens depending on this bindgen
578 // though we still generate a module which reexports the
579 // original module. This helps maintain the same output
580 // structure regardless of whether `with` is used.
581 let name_at_root = match &generator.generator.interface_names[&id] {
582 InterfaceName::Remapped { name_at_root, .. } => name_at_root,
583 InterfaceName::Path(_) => unreachable!(),
584 };
585 let path_to_root = generator.path_to_root();
586 format!(
587 "
588 pub mod {snake} {{
589 #[allow(unused_imports)]
590 pub use {path_to_root}{name_at_root}::*;
591 }}
592 "
593 )
594 } else {
595 // If this interface is not remapped then it's time to
596 // actually generate bindings here.
597 generator.generator.interface_link_options[&id].write_struct(&mut generator.src);
598 generator.types(id);
599 let key_name = resolve.name_world_key(name);
600 generator.generate_add_to_linker(id, &key_name);
601
602 let module = &generator.src[..];
603 let wt = generator.generator.wasmtime_path();
604
605 format!(
606 "
607 #[allow(clippy::all)]
608 pub mod {snake} {{
609 #[allow(unused_imports)]

Callers 1

importMethod · 0.80

Calls 14

to_rust_identFunction · 0.85
name_interfaceMethod · 0.80
path_to_rootMethod · 0.80
write_structMethod · 0.80
wasmtime_pathMethod · 0.80
import_interface_pathMethod · 0.80
write_impl_from_worldMethod · 0.80
newFunction · 0.50
unwrapMethod · 0.45
as_refMethod · 0.45
typesMethod · 0.45

Tested by

no test coverage detected