# bragi
Helper crate used in code generated by [bragi](https://github.com/managarm/bragi)
and Rust software written for [Managarm](https://github.com/managarm/bragi/managarm).
The bindings can be generated from a `build.rs` file with the help of the
[`bragi-build`](https://crates.io/crates/bragi-build) crate.
## Examples
Given the example bragi message:
```bragi
message ExampleMessage 1 {
head(128):
uint32 a;
uint32 b;
}
```
### Including generated bindings
```rs
// Include the generated bindings.
bragi::include_binding!(mod bindings = "bindings.rs");
```
### Encoding a message into a `Vec<u8>`
```rs
fn encode_an_example_message() -> std::io::Result<Vec<u8>> {
// Create an example message
let msg = bindings::ExampleMessage::new(1337, 420);
// Encode an example message into a byte buffer.
let buffer = bragi::message_head_to_bytes(&msg)?;
Ok(buffer)
}
```
### Decoding a message from a `Vec<u8>`
```rs
fn decode_an_example_message(buffer: &[u8]) -> std::io::Result<()> {
// Decode an example message
let msg: bindings::ExampleMessage = bragi::head_from_bytes(buffer)?;
// Print the decoded message
println!("a: {}", msg.a());
println!("b: {}", msg.b());
Ok(())
}
```
## License
This crate is licensed under the MIT license.
See the [LICENSE](LICENSE) file for more details.