[−][src]Crate bytemuck
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
uses [cast
]&T
uses [cast_ref
]&mut T
uses [cast_mut
]&[T]
uses [cast_slice
]&mut [T]
uses [cast_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.
Macros
offset_of | Find the offset in bytes of the given |
Enums
PodCastError | The things that can go wrong when casting between [ |
Traits
Contiguous | A trait indicating that: |
Pod | Marker trait for "plain old data". |
TransparentWrapper | A trait which indicates that a type is a |
Zeroable | Trait for types that can be safely created with
|
Functions
bytes_of | Re-interprets |
bytes_of_mut | Re-interprets |
cast | Cast |
cast_mut | Cast |
cast_ref | Cast |
cast_slice | Cast |
cast_slice_mut | Cast |
from_bytes | Re-interprets |
from_bytes_mut | Re-interprets |
pod_align_to | As |
pod_align_to_mut | As |
try_cast | Try to cast |
try_cast_mut | Try to convert a |
try_cast_ref | Try to convert a |
try_cast_slice | Try to convert |
try_cast_slice_mut | Try to convert |
try_from_bytes | Re-interprets |
try_from_bytes_mut | Re-interprets |