vk_generator 0.3.2

Generate Rust bindings to the Vulkan API
Documentation
extern crate vk_generator;
extern crate vk_api;

use std::path::Path;
use std::fs::{File, DirBuilder};
use std::process::Command;
use std::io::Write;
use std::str;

use vk_generator::{VkVersion, GenConfig, VariantPaddingConfig};

#[test]
fn default_global() {
    let out = env!("OUT_DIR");
    DirBuilder::new().recursive(true).create(&out).unwrap();

    let mut file = File::create(&Path::new(&out).join("default_global.rs")).unwrap();
    writeln!(file, "fn main() {{}} mod vk {{").unwrap();
    vk_generator::VkRegistry::new(vk_api::VK_XML)
        .gen_global(
            &mut file,
            VkVersion(1, 0),
            &["VK_KHR_surface", "VK_EXT_debug_report"],
            Default::default()
        );
    writeln!(file, "}}").unwrap();

    let error = String::from_utf8(Command::new("rustc").current_dir(&out).arg("default_global.rs").output().unwrap().stderr).unwrap();
    if error != "" {
        panic!("{}", error);
    }
}

#[test]
fn default_struct() {
    let out = env!("OUT_DIR");
    DirBuilder::new().recursive(true).create(&out).unwrap();

    let mut file = File::create(&Path::new(&out).join("default_struct.rs")).unwrap();
    writeln!(file, "fn main() {{}} mod vk {{").unwrap();
    vk_generator::VkRegistry::new(vk_api::VK_XML)
        .gen_struct(
            &mut file,
            VkVersion(1, 0),
            &["VK_KHR_surface", "VK_EXT_debug_report"],
            Default::default()
        );
    writeln!(file, "}}").unwrap();

    let error = String::from_utf8(Command::new("rustc").current_dir(&out).arg("default_struct.rs").output().unwrap().stderr).unwrap();
    if error != "" {
        panic!("{}", error);
    }
}

#[test]
fn nondefault_global() {
    let out = env!("OUT_DIR");
    DirBuilder::new().recursive(true).create(&out).unwrap();

    let mut file = File::create(&Path::new(&out).join("nondefault_global.rs")).unwrap();
    writeln!(file, "{}", include_str!("./libc_dummy.rs")).unwrap();
    writeln!(file, "fn main() {{}} mod vk {{").unwrap();
    vk_generator::VkRegistry::new(vk_api::VK_XML)
        .gen_global(
            &mut file,
            VkVersion(1, 0),
            &["VK_KHR_surface", "VK_EXT_debug_report"],
            GenConfig {
                remove_type_prefix: true,
                remove_vk_result_prefix: false,
                remove_command_prefix: false,
                remove_bitmask_prefix: false,
                remove_const_prefix: false,
                variant_padding: VariantPaddingConfig::RemovePrefix,
                snake_case_commands: false,
                camel_case_variants: false,
                snake_case_members: false,
                use_native_enums: false,
                wrap_bitmasks: false,
                use_libc_types: true,
                ..GenConfig::default()
            },
        );
    writeln!(file, "}}").unwrap();

    let error = String::from_utf8(Command::new("rustc").current_dir(&out).arg("nondefault_global.rs").output().unwrap().stderr).unwrap();
    if error != "" {
        panic!("{}", error);
    }
}

#[test]
fn nondefault_struct() {
    let out = env!("OUT_DIR");
    DirBuilder::new().recursive(true).create(&out).unwrap();

    let mut file = File::create(&Path::new(&out).join("nondefault_struct.rs")).unwrap();
    writeln!(file, "{}", include_str!("./libc_dummy.rs")).unwrap();
    writeln!(file, "fn main() {{}} mod vk {{").unwrap();
    vk_generator::VkRegistry::new(vk_api::VK_XML)
        .gen_struct(
            &mut file,
            VkVersion(1, 0),
            &["VK_KHR_surface", "VK_EXT_debug_report"],
            GenConfig {
                remove_type_prefix: true,
                remove_vk_result_prefix: false,
                remove_command_prefix: false,
                remove_bitmask_prefix: false,
                remove_const_prefix: false,
                variant_padding: VariantPaddingConfig::Keep,
                snake_case_commands: false,
                camel_case_variants: false,
                snake_case_members: false,
                use_native_enums: false,
                wrap_bitmasks: false,
                use_libc_types: true,
                ..GenConfig::default()
            }
        );
    writeln!(file, "}}").unwrap();

    let error = String::from_utf8(Command::new("rustc").current_dir(&out).arg("nondefault_struct.rs").output().unwrap().stderr).unwrap();
    if error != "" {
        panic!("{}", error);
    }
}