# vk-parse
[![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE-MIT)
[![LICENSE](https://img.shields.io/badge/license-apache-blue.svg)](LICENSE-APACHE)
[![Documentation](https://docs.rs/vk-parse/badge.svg)](https://docs.rs/vk-parse)
[![Crates.io Version](https://img.shields.io/crates/v/vk-parse.svg)](https://crates.io/crates/vk-parse)
[![](https://tokei.rs/b1/github/krolli/vk-parse)](https://github.com/krolli/vk-parse)
[![Build Status](https://github.com/krolli/vk-parse/actions/workflows/ci.yaml/badge.svg)](https://github.com/krolli/vk-parse/actions/workflows/ci.yaml)
`vk-parse` is a Rust crate which parses the Vulkan API registry XML and converts it to a Rust representation.
This crate provides a library which parses the Vulkan registry XML and either provides its own lossless representation of the registry, or converts it to structures from [vkxml](https://github.com/terrybrashaw/vkxml).
## Usage
To get started, you'll need `vk.xml` file which is used for generating Vulkan header files and is stored in [Vulkan-Docs](https://github.com/KhronosGroup/Vulkan-Docs) repository.
After that, in your Rust project:
`Cargo.toml`
```toml
[dependencies]
vk-parse = "0.12"
```
`main.rs`
```rust
extern crate vk_parse;
use std::path::Path;
fn main() {
let (registry, _errors) = vk_parse::parse_file(Path::new("vk.xml")).unwrap();
println!("{:?}", registry);
}
```
Conversion to structures from [vkxml](https://github.com/terrybrashaw/vkxml) is optional and must be enabled using feature.
`Cargo.toml`
```toml
[dependencies]
vk-parse = { version = "0.12", features = ["vkxml-convert"] }
vkxml = "0.3"
```
`main.rs`
```rust
extern crate vk_parse;
extern crate vkxml;
use std::path::Path;
fn main() {
// You can either parse normal structures and convert them into vkxml format ...
let (registry_ir, _errors) = vk_parse::parse_file(Path::new("vk.xml")).unwrap();
println!("{:?}", registry_ir);
let registry_vkxml: vkxml::Registry = registry_ir.into();
println!("{:?}", registry_vkxml);
// ... or do both in single call.
let registry_vkxml = vk_parse::parse_file_as_vkxml(Path::new("vk.xml")).unwrap();
println!("{:?}", registry_vkxml);
}
```
## License
This software is dual-licensed under Apache-2.0/MIT, same as Rust itself.