Skip to main content

dawn_codegen/emitter/
render.rs

1use crate::api_model::ApiModel;
2
3pub struct GeneratedFiles {
4    pub enums: String,
5    pub structs: String,
6    pub extensions: String,
7    pub objects: String,
8    pub callbacks: String,
9    pub functions: String,
10    pub constants: String,
11}
12
13pub fn generate_strings(model: &ApiModel) -> GeneratedFiles {
14    let c_prefix = model.c_prefix.clone();
15    let enums = format_rust_source(&crate::emitter::enums::emit(model, &c_prefix));
16    let structs = format_rust_source(&crate::emitter::structs::emit(model, &c_prefix));
17    let extensions = format_rust_source(&crate::emitter::extensions::emit(model, &c_prefix));
18    let objects = format_rust_source(&crate::emitter::objects::emit(model, &c_prefix));
19    let callbacks = format_rust_source(&crate::emitter::callbacks::emit(model, &c_prefix));
20    let functions = format_rust_source(&crate::emitter::functions::emit(model, &c_prefix));
21    let constants = format_rust_source(&crate::emitter::constants::emit(model));
22
23    GeneratedFiles {
24        enums,
25        structs,
26        extensions,
27        objects,
28        callbacks,
29        functions,
30        constants,
31    }
32}
33
34pub fn format_rust_source(source: &str) -> String {
35    match syn::parse_file(source) {
36        Ok(file) => prettyplease::unparse(&file),
37        Err(_) => source.to_string(),
38    }
39}