Trait safe_transmute::trivial::TriviallyTransmutable
source · pub unsafe trait TriviallyTransmutable: Copy { }
Expand description
Type that can be constructed from any combination of bytes.
A type T
implementing this trait means that any arbitrary slice of bytes
of length size_of::<T>()
can be safely interpreted as a value of that
type with support for unaligned memory access. In most (but not all)
cases this is a POD class or a
trivially copyable class.
This serves as a marker trait for all functions in this module.
Enable the const_generics
feature to implement this for arbitrary [T: TriviallyTransmutable, N]
arrays,
instead of just 1-32.
This, of course, requires a sufficiently fresh rustc (at least 1.51).
Warning: if you transmute into a floating-point type you will have a chance to create a signaling NaN,
which, while not illegal, can be unwieldy. Check out util::designalise_f{32,64}()
for a remedy.
Nota bene: bool
is not TriviallyTransmutable
because they’re restricted to
being 0
or 1
, which means that an additional value check is required.
§Safety
It is only safe to implement TriviallyTransmutable
for a type T
if it
is safe to read or write a value T
at the pointer of an arbitrary slice
&[u8]
, of length size_of<T>()
, as long as the same slice is
well aligned in memory for reading and writing a T
.
Consult the Transmutes section of the Nomicon for more details.