Expand description
This crate gives small utilities for casting between plain data types.
Basics
Data comes in five basic forms in Rust, so we have five basic casting functions:
T
usescast
&T
usescast_ref
&mut T
usescast_mut
&[T]
usescast_slice
&mut [T]
usescast_slice_mut
Some casts will never fail (eg: cast::<u32, f32>
always works), other
casts might fail (eg: cast_ref::<[u8; 4], u32>
will fail if the reference
isn’t already aligned to 4). Each casting function has a “try” version which
will return a Result
, and the “normal” version which will simply panic on
invalid input.
Using Your Own Types
All the functions here are guarded by the Pod
trait, which is a
sub-trait of the Zeroable
trait.
If you’re very sure that your type is eligible, you can implement those
traits for your type and then they’ll have full casting support. However,
these traits are unsafe
, and you should carefully read the requirements
before adding the them to your own types.
Features
- This crate is core only by default, but if you’re using Rust 1.36 or later
you can enable the
extern_crate_alloc
cargo feature for some additional methods related toBox
andVec
. Note that thedocs.rs
documentation is always built withextern_crate_alloc
cargo feature enabled.
Re-exports
pub use checked::CheckedBitPattern;
Modules
CheckedBitPattern
types.Macros
$field
of $Type
. Requires an
already initialized $instance
value to work with.Enums
Pod
data forms.Traits
#[repr(transparent)]
wrapper
around the Inner
value.Functions
&T
as &[u8]
.&mut T
as &mut [u8]
.T
into U
&mut T
into &mut U
.&T
into &U
.&[A]
into &[B]
.&mut [T]
into &mut [U]
.&[u8]
as &T
.&mut [u8]
as &mut T
.align_to
, but safe because of the Pod
bound.align_to_mut
, but safe because of the Pod
bound.T
value.T
into U
.&mut T
into &mut U
.&T
into &U
.&[A]
into &[B]
(possibly with a change in length).&mut [A]
into &mut [B]
(possibly with a change in
length).&[u8]
as &T
.&mut [u8]
as &mut T
.T
.