Crate slice_as_array [−] [src]
This crate provides macros to convert from slices, which have lengths
that are stored and checked at runtime, into arrays, which have lengths
known at compile time. This can make types more expressive (e.g.
&[u8; 32]
instead of &[u8]
) and helps the compiler omit bounds checks.
slice_as_array!(xs, [u32; 4])
returns Some(&[u32; 4])
if xs
was
a slice of length 4, or None
otherwise.
slice_as_array_mut!(ys, [String; 7])
returns Some(&mut [String; 7])
if ys
was a slice of length 7, or None
otherwise.
For most users, stating a dependency on this is simply:
[dependencies] slice_as_array "1.0.0"
To support being called from a #![no_std]
crate, this crate has a feature
named with_std
that is on by default. A #![no_std]
crate should use:
[dependencies] slice_as_array = { version = "1.0.0", default-features = false }
Example usage:
#[macro_use] extern crate slice_as_array; fn slice_as_hash(xs: &[u8]) -> &[u8; 32] { slice_as_array!(xs, [u8; 32]).expect("bad hash length") } fn mutate_chunk(xs: &mut [u32; 10]) { // ... } fn mutate_chunks(xs: &mut [u32; 100]) { for chunk in xs.chunks_mut(10).map(|c| slice_as_array_mut!(c, [u32; 10]).unwrap() ) { mutate_chunk(chunk) } }
Macros
slice_as_array! |
Convert a slice to an array.
|
slice_as_array_mut! |
Convert a mutable slice to a mutable array.
|