1pub mod api_model;
2pub mod emitter;
3pub mod parser;
4pub mod visitor;
5
6pub use api_model::ApiModel;
7pub use emitter::{GeneratedFiles, format_rust_source, generate_strings};
8pub use parser::DawnJsonParser;
9
10use std::path::Path;
11
12pub fn generate_ffi_string(
13 api_header: &Path,
14 clang_args: &[String],
15) -> Result<String, Box<dyn std::error::Error>> {
16 let api_header_str = api_header.to_string_lossy().replace('\\', "\\\\");
17 let wrapper = format!(
18 r#"#include "{api_header_str}"
19 #include <dawn/dawn_proc_table.h>
20 "#,
21 );
22 let mut builder = bindgen::Builder::default()
23 .header_contents("dawn_rs_bindgen_wrapper.h", &wrapper)
24 .allowlist_item("WGPU.*")
25 .allowlist_item("wgpu.*")
26 .allowlist_item("DawnProcTable")
27 .allowlist_item("dawnProcSetProcs");
28 for arg in clang_args {
29 builder = builder.clang_arg(arg);
30 }
31 let bindings = builder
32 .parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
33 .generate()?;
34 Ok(bindings.to_string())
35}