Marker trait for “plain old data”.
The point of this trait is that once something is marked “plain old data” you can really go to town with the bit fiddling and bit casting. Therefore, it’s a relatively strong claim to make about a type. Do not add this to your type casually.
Reminder: The results of casting around bytes between data types are endian dependant. Little-endian machines are the most common, but big-endian machines do exist (and big-endian is also used for “network order” bytes).
- The type must be inhabited (eg: no Infallible).
- The type must allow any bit pattern (eg: no
char, which have illegal bit patterns).
- The type must not contain any uninit (or padding) bytes, either in the middle or on
the end (eg: no
#[repr(C)] struct Foo(u8, u16), which has padding in the middle, and also no
#[repr(C)] struct Foo(u16, u8), which has padding on the end).
- The type needs to have all fields also be
- The type needs to be
repr(transparent). In the case of
alignrepr modifiers can be used as long as all other rules end up being followed.