dawn-codegen 0.1.2

Code generator for Dawn WebGPU API
Documentation
use crate::api_model::ApiModel;

pub struct GeneratedFiles {
    pub enums: String,
    pub structs: String,
    pub extensions: String,
    pub objects: String,
    pub callbacks: String,
    pub functions: String,
    pub constants: String,
}

pub fn generate_strings(model: &ApiModel) -> GeneratedFiles {
    let c_prefix = model.c_prefix.clone();
    let enums = format_rust_source(&crate::emitter::enums::emit(model, &c_prefix));
    let structs = format_rust_source(&crate::emitter::structs::emit(model, &c_prefix));
    let extensions = format_rust_source(&crate::emitter::extensions::emit(model, &c_prefix));
    let objects = format_rust_source(&crate::emitter::objects::emit(model, &c_prefix));
    let callbacks = format_rust_source(&crate::emitter::callbacks::emit(model, &c_prefix));
    let functions = format_rust_source(&crate::emitter::functions::emit(model, &c_prefix));
    let constants = format_rust_source(&crate::emitter::constants::emit(model));

    GeneratedFiles {
        enums,
        structs,
        extensions,
        objects,
        callbacks,
        functions,
        constants,
    }
}

pub fn format_rust_source(source: &str) -> String {
    match syn::parse_file(source) {
        Ok(file) => prettyplease::unparse(&file),
        Err(_) => source.to_string(),
    }
}