2 stable releases
Uses old Rust 2015
1.1.0 | May 2, 2016 |
---|---|
1.0.0 | Mar 13, 2016 |
#2684 in Algorithms
653 downloads per month
Used in 10 crates
(3 directly)
9KB
141 lines
This is a Rust crate to convert slices (which have run-time lengths) to arrays (which have compile-time lengths).
lib.rs
:
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)
}
}
Dependencies
~66KB