#reader #idl #bragi

bragi

Helper crate used in code generated by bragi

1 unstable release

Uses new Rust 2024

new 0.1.0 Apr 30, 2025

#24 in #idl

Download history 81/week @ 2025-04-25

81 downloads per month

MIT license

17KB
379 lines

bragi

Helper crate used in code generated by bragi and Rust software written for Managarm.

The bindings can be generated from a build.rs file with the help of the bragi-build crate.

Examples

Given the example bragi message:

message ExampleMessage 1 {
head(128):
	uint32 a;
    uint32 b;
}

Including generated bindings

// Include the generated bindings.
bragi::include_binding!(mod bindings = "bindings.rs");

Encoding a message into a Vec<u8>

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::write_head_only(&msg)?;

    Ok(buffer)
}

Decoding a message from a Vec<u8>

fn decode_an_example_message(buf: &[u8]) -> std::io::Result<()> {
    // Create a reader
    let mut cursor = std::io::Cursor::new(buf);
    // Decode an example message
    let msg: bindings::ExampleMessage = bragi::read_head_only(&mut cursor)?;
    // 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 file for more details.

Dependencies

~22KB