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.

slice_to_array_clone!(zs, [String; 4] returns Some([String; 4]) if zs was a slice of length 4, or `None otherwise. The passed-in slice remains intact and its elements are cloned.

For most users, stating a dependency on this is simply:

[dependencies]
slice_as_array "1.1.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.1.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!(slice, [element_type; array_length]) -> Option<&[element_type; array_length]>

slice_as_array_mut!

Convert a mutable slice to a mutable array. slice_as_array_mut!(mutable_slice, [element_type; array_length]) -> Option<&mut [element_type; array_length]>

slice_to_array_clone!

Convert a slice to an array by cloning each element. slice_to_array_clone!(slice, [element_type; array_length]) -> Option<[element_type; array_length]>