1use crate::encoding::encode_world;
2use anyhow::{Context, Result};
3use wasm_encoder::{ComponentBuilder, ComponentExportKind, ComponentTypeRef};
4use wasmparser::Validator;
5use wit_parser::{Resolve, WorldId};
6
7pub fn targets(resolve: &Resolve, world: WorldId, component_to_test: &[u8]) -> Result<()> {
11 let mut root_component = ComponentBuilder::default();
12
13 let component_to_test_idx = root_component.component_raw(component_to_test);
15
16 let test_component_idx = {
19 let component_ty = encode_world(resolve, world)?;
20 let mut component = ComponentBuilder::default();
21 let component_ty_idx = component.type_component(&component_ty);
22 component.import(
23 &resolve.worlds[world].name,
24 ComponentTypeRef::Component(component_ty_idx),
25 );
26 root_component.component(component)
27 };
28
29 let args: Vec<(String, ComponentExportKind, u32)> = vec![(
31 resolve.worlds[world].name.clone(),
32 ComponentExportKind::Component,
33 component_to_test_idx,
34 )];
35 root_component.instantiate(test_component_idx, args);
36
37 let bytes = root_component.finish();
38
39 Validator::new()
40 .validate_all(&bytes)
41 .context("failed to validate encoded bytes")?;
42
43 Ok(())
44}