Skip to main content

dawn_codegen/
lib.rs

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}