lib.rs |
A crate used for calculating offsets of struct members and their spans.
This functionality currently can not be used in compile time code such as `const` or `const fn` definitions.
## Examples
```
use memoffset::{offset_of, span_of};
#[repr(C, packed)]
struct HelpMeIAmTrappedInAStructFactory {
help_me_before_they_: [u8; 15],
a: u32
}
fn main() {
assert_eq!(offset_of!(HelpMeIAmTrappedInAStructFactory, a), 15);
assert_eq!(span_of!(HelpMeIAmTrappedInAStructFactory, a), 15..19);
assert_eq!(span_of!(HelpMeIAmTrappedInAStructFactory, help_me_before_they_ .. a), 0..15);
}
```
This functionality can be useful, for example, for checksum calculations:
```ignore
#[repr(C, packed)]
struct Message {
header: MessageHeader,
fragment_index: u32,
fragment_count: u32,
payload: [u8; 1024],
checksum: u16
}
let checksum_range = &raw[span_of!(Message, header..checksum)];
let checksum = crc16(checksum_range);
``` |
3067 |
offset_of.rs |
|
11764 |
raw_field.rs |
|
7700 |
span_of.rs |
|
8658 |