[−][src]Crate memoffset
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
#[macro_use] extern crate memoffset; #[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:
ⓘThis example is not tested
#[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);
Macros
offset_of | Calculates the offset of the specified field from the start of the struct. |
raw_field | Computes a const raw pointer to the given field of the given base pointer to the given parent type. |
span_of | Produces a range instance representing the sub-slice containing the specified member. |