1use arbitrary::{Result, Unstructured};
9use wit_parser::{InvalidTransitiveDependency, Resolve};
10
11mod config;
12pub use self::config::Config;
13mod generate;
14
15pub fn smith(config: &Config, u: &mut Unstructured<'_>) -> Result<Vec<u8>> {
20 let pkgs = generate::Generator::new(config.clone()).generate(u)?;
21 let mut resolve = Resolve::default();
22 let mut last = None;
23 for pkg in pkgs {
24 let group = pkg.sources.parse().unwrap();
25 let id = match resolve.push_group(group) {
26 Ok(id) => id,
27 Err(e) => {
28 if e.is::<InvalidTransitiveDependency>() {
29 return Err(arbitrary::Error::IncorrectFormat);
30 }
31 panic!("bad wit parse: {e:?}")
32 }
33 };
34 last = Some(id);
35 }
36 let pkg = last.unwrap();
37
38 Ok(wit_component::encode(&resolve, pkg).expect("failed to encode WIT document"))
39}