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]>