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

Method export_interface

crates/cpp/src/lib.rs:569–610  ·  view source on GitHub ↗
(
        &mut self,
        resolve: &Resolve,
        name: &WorldKey,
        id: InterfaceId,
        _files: &mut Files,
    )

Source from the content-addressed store, hash-verified

567 }
568
569 fn export_interface(
570 &mut self,
571 resolve: &Resolve,
572 name: &WorldKey,
573 id: InterfaceId,
574 _files: &mut Files,
575 ) -> anyhow::Result<()> {
576 let old_prefix = self.opts.export_prefix.clone();
577 if let Some(prefix) = self
578 .interface_prefixes
579 .get(&(Direction::Export, name.clone()))
580 {
581 self.opts.export_prefix =
582 Some(prefix.clone() + old_prefix.as_ref().unwrap_or(&String::new()));
583 }
584 let store = self.start_new_file(None);
585 self.h_src
586 .src
587 .push_str(&format!("// export_interface {name:?}\n"));
588 self.imported_interfaces.remove(&id);
589 let wasm_import_module = resolve.name_world_key(name);
590 let binding = Some(name);
591 let mut r#gen = self.interface(resolve, binding, false, Some(wasm_import_module));
592 r#gen.interface = Some(id);
593 let namespace = namespace(resolve, &TypeOwner::Interface(id), true, &r#gen.r#gen.opts);
594 let docs = resolve.interfaces[id].docs.contents.as_deref();
595 r#gen
596 .r#gen
597 .h_src
598 .change_namespace_with_docs(&namespace, docs);
599 r#gen.types(id);
600
601 for (_name, func) in resolve.interfaces[id].functions.iter() {
602 if matches!(func.kind, FunctionKind::Freestanding) {
603 r#gen.r#gen.h_src.change_namespace(&namespace);
604 r#gen.generate_function(func, &TypeOwner::Interface(id), AbiVariant::GuestExport);
605 }
606 }
607 self.finish_file(&namespace, store);
608 self.opts.export_prefix = old_prefix;
609 Ok(())
610 }
611
612 fn import_funcs(
613 &mut self,

Callers

nothing calls this directly

Calls 13

newFunction · 0.85
namespaceFunction · 0.85
start_new_fileMethod · 0.80
removeMethod · 0.80
change_namespaceMethod · 0.80
generate_functionMethod · 0.80
finish_fileMethod · 0.80
getMethod · 0.45
push_strMethod · 0.45
interfaceMethod · 0.45
typesMethod · 0.45

Tested by

no test coverage detected