A crate for traits that describe certain memory layout invariants of a given type along with derive macros for deriving these traits for custom types.
This crate currently contains the following traits:
FixedLayout: types that have a well-defined layout that can be relied onNoUninit: types that do not have any unintialized bytesByteComplete: types where any appropriately sized and aligned array of bytes is a valid representation of that typeZeroable: types where all zeros are a valid representation of the type in memoryFromBytes: types where any appropriately sized and aligned array of bytes can be viewed as the type.AsBytes: The type can reliably be turned into a slice of bytes
fnsafe_transmute<From:AsBytes,To:FromBytes>(from:From) -> To{let from = &std::mem::ManuallyDrop::new(from);assert!(std::mem::size_of::<From>() == std::mem::size_of::<To>(),"Cannot transmute to smaller type");assert!(std::mem::align_of::<From>() % std::mem::align_of::<To>() == 0,"Not aligned");unsafe{ std::mem::transmute_copy(from)}}