Macro container_of

Source
macro_rules! container_of {
    ($field_ptr:expr, $Container:ty, $($fields:tt)*) => { ... };
}
Expand description

Produces a pointer to an object from a pointer to one of its fields.

If you encounter a type mismatch due to the Opaque type, then use Opaque::cast_into or Opaque::cast_from to resolve the mismatch.

§Safety

The pointer passed to this macro, and the pointer returned by this macro, must both be in bounds of the same allocation.

§Examples

struct Test {
    a: u64,
    b: u32,
}

let test = Test { a: 10, b: 20 };
let b_ptr: *const _ = &test.b;
// SAFETY: The pointer points at the `b` field of a `Test`, so the resulting pointer will be
// in-bounds of the same allocation as `b_ptr`.
let test_alias = unsafe { container_of!(b_ptr, Test, b) };
assert!(core::ptr::eq(&test, test_alias));