wasmer_wasi_types/
lib.rs

1#![doc(html_favicon_url = "https://wasmer.io/images/icons/favicon-32x32.png")]
2#![doc(html_logo_url = "https://github.com/wasmerio.png?size=200")]
3
4pub mod types;
5pub mod wasi;
6
7// Prevent the CI from passing if the wasi/bindings.rs is not
8// up to date with the output.wit file
9#[test]
10#[cfg(feature = "sys")]
11fn fail_if_wit_files_arent_up_to_date() {
12    use wit_bindgen_core::Generator;
13
14    let output_wit = concat!(env!("CARGO_MANIFEST_DIR"), "/wit-clean/output.wit");
15    let bindings_target =
16        include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/wasi/bindings.rs"));
17    let mut generator = wit_bindgen_rust_wasm::Opts {
18        ..wit_bindgen_rust_wasm::Opts::default()
19    }
20    .build();
21    let output_wit_parsed = wit_parser::Interface::parse_file(output_wit).unwrap();
22    let imports = vec![output_wit_parsed];
23    let exports = vec![];
24    let mut files = Default::default();
25    generator.generate_all(
26        &imports, &exports, &mut files, /* generate_structs */ true,
27    );
28    let generated = files
29        .iter()
30        .filter_map(|(k, v)| if k == "bindings.rs" { Some(v) } else { None })
31        .next()
32        .unwrap();
33    let generated_str = String::from_utf8_lossy(generated);
34    let generated_str = generated_str
35        .lines()
36        .map(|s| s.to_string())
37        .collect::<Vec<String>>()
38        .join("\r\n");
39    let generated_str = generated_str.replace("mod output {", "pub mod output {");
40    let bindings_target = bindings_target
41        .lines()
42        .map(|s| s.to_string())
43        .collect::<Vec<String>>()
44        .join("\r\n");
45    pretty_assertions::assert_eq!(generated_str, bindings_target); // output.wit out of date? regenerate bindings.rs
46}