Crates.io | raw_struct |
lib.rs | raw_struct |
version | 0.1.3 |
source | src |
created_at | 2024-10-16 15:23:33.887209 |
updated_at | 2024-10-18 06:27:48.997052 |
description | raw_struct is a Rust procedural macro for easily declaring C-style structs that reference local or external memory, based on your memory implementation. It generates appropiate getter methods for easy access. |
homepage | |
repository | https://github.com/WolverinDEV/lazy-link |
max_upload_size | |
id | 1411931 |
size | 58,294 |
raw_struct
is a Rust procedural macro for easily declaring C-style structs that reference local or external memory, based on your memory implementation. It generates appropiate getter methods for easy access. This crate has support for no_std
environments.
To use raw_struct
, simply define a struct with the raw_struct attribute as following:
#[raw_struct(size = 0x10)]
struct MyStruct {
#[field(offset = 0x00)]
pub field_a: u32,
#[field(offset = 0x04)]
pub field_b: u32,
#[field(offset = 0x08, getter = "get_field_c")]
pub field_c: [u8; 0x8],
}
To reference the declared struct in memory you can ether do so by Reference
or Copy
:
let memory = [0u8; 0x10];
{
let object = Reference::<dyn MyStruct>::new(0x00, Arc::new(memory.clone()));
println!("field_a = {}", object.field_a()?);
println!("field_b = {}", object.field_b()?);
}
{
let object = Copy::<dyn MyStruct>::new(memory);
println!("field_a = {}", object.field_a()?);
println!("field_b = {}", object.field_b()?);
}
Examples can be found within the examples directory of this repository. These examples demonstrate how to use raw_struct in various contexts.
To run the examples, clone the repository and use the following command:
cargo run --bin <example_name>