[−][src]Crate repr_trait
Traits to represent repr
s
If it is important for a generic parameter to have a particular repr
, you can use
the traits in this crate to ensure that it has the needed repr
.
For example, if you have an unsafe
function that requires a specific repr
,
you can use these traits to create a safe wrapper around it.
use repr_trait::Packed; // Safety: Only safe to call when T has #[repr(packed)] unsafe fn safe_when_packed<T>(_param: T) { unimplemented!() } fn safe_wrapper<T: Packed>(param: T) { // Safety: Safe because T is guaranteed to be #[repr(packed)] unsafe { safe_when_packed(param) } }
Implementing the traits from this crate is easy using derive macros. There is a derive macro for each included trait.
#[derive(Packed, Default)] #[repr(packed)] struct PackedData(u32, u8); safe_wrapper(PackedData(123, 45));
If the appropriate repr
is not specified, the derive macro will refuse to compile.
ⓘ
#[derive(Packed)] struct NotPacked(u32, u8);
Traits
C | Trait for types declared with |
Packed | Trait for types declared with |
Transparent | Trait for types declared with |
Derive Macros
C | Derive macro for |
Packed | Derive macro for |
Transparent | Derive macro for |