[][src]Crate memoffset

A crate used for calculating offsets of struct members and their spans.

Some of the funcationality of the crate makes no sense when used along with structs that are not #[repr(C, packed)], but it is up to the user to make sure that they are.


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_[2] .. a), 2..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);



Calculates the offset of the specified field from the start of the struct. This macro supports arbitrary amount of subscripts and recursive member-accesses.


Produces a range instance representing the sub-slice containing the specified member.