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

Method import_interface

crates/moonbit/src/lib.rs:261–319  ·  view source on GitHub ↗
(
        &mut self,
        resolve: &Resolve,
        key: &WorldKey,
        id: InterfaceId,
        files: &mut Files,
    )

Source from the content-addressed store, hash-verified

259 }
260
261 fn import_interface(
262 &mut self,
263 resolve: &Resolve,
264 key: &WorldKey,
265 id: InterfaceId,
266 files: &mut Files,
267 ) -> Result<()> {
268 let name = PkgResolver::interface_name(resolve, key);
269 let name = self.interface_ns.tmp(&name);
270 self.pkg_resolver
271 .import_interface_names
272 .insert(id, name.clone());
273
274 let mut r#gen = self.interface(resolve, &name, Direction::Import, Some(key));
275 r#gen.types(id);
276
277 for (_, func) in resolve.interfaces[id].functions.iter() {
278 r#gen.import(func);
279 }
280
281 let fragment = r#gen.finish();
282 // Write files
283 {
284 let directory = name.replace('.', "/");
285
286 // README
287 if let Some(content) = &resolve.interfaces[id].docs.contents
288 && !content.is_empty()
289 {
290 files.push(&format!("{directory}/README.md"), content.as_bytes());
291 }
292
293 // Source
294 let mut src = Source::default();
295 wit_bindgen_core::generated_preamble(&mut src, VERSION);
296 uwriteln!(src, "{}", fragment.src);
297 files.push(&format!("{directory}/top.mbt"), indent(&src).as_bytes());
298
299 // FFI
300 let mut ffi = Source::default();
301 wit_bindgen_core::generated_preamble(&mut ffi, VERSION);
302 uwriteln!(ffi, "{}", fragment.ffi);
303 for builtin in fragment.builtins {
304 uwriteln!(ffi, "{}", builtin);
305 }
306 files.push(&format!("{directory}/ffi.mbt"), indent(&ffi).as_bytes());
307
308 // moon.pkg.json
309 let mut moon_pkg = Source::default();
310 self.write_moon_pkg(
311 &mut moon_pkg,
312 self.pkg_resolver.package_import.get(&name),
313 false,
314 );
315 files.push(&format!("{directory}/moon.pkg.json"), moon_pkg.as_bytes());
316 }
317
318 Ok(())

Callers

nothing calls this directly

Calls 14

interface_nameFunction · 0.85
generated_preambleFunction · 0.85
write_moon_pkgMethod · 0.80
indentFunction · 0.70
tmpMethod · 0.45
insertMethod · 0.45
interfaceMethod · 0.45
typesMethod · 0.45
iterMethod · 0.45
importMethod · 0.45
finishMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected