# vk-parse
[](LICENSE-MIT)
[](LICENSE-APACHE)
[](https://docs.rs/vk-parse)
[](https://crates.io/crates/vk-parse)
[](https://github.com/krolli/vk-parse)
[](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.15"
```
`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.15", 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.