Expand description
no_std
array helpers available without nightly.
§Description
Many useful array and slice methods are currently gated by nightly features, though their general functionality and interface is essentially stable. As such this crate provides stable alternatives to the following features, often the same underlying implementation as the current nightly version:
§Usage
Users can either import an Ext
trait (SliceExt
, ArrayExt
, or
SliceOfArrayExt
) traits to bring in the desired methods, or use the bare
functions. Note that trait methods have the _ext
suffix to avoid
collision with the core library methods.
use array_util::ArrayExt;
let a = ["1", "2", "3"];
let b = a.try_map_ext(|v| v.parse::<u32>()).unwrap().map(|v| v + 1);
assert_eq!(b, [2, 3, 4]);
let a = ["1", "2a", "3"];
let b = a.try_map_ext(|v| v.parse::<u32>());
assert!(b.is_err());
let a = ["1", "2", "3"];
let b = array_util::try_map(a, |v| v.parse::<u32>()).unwrap().map(|v| v + 1);
assert_eq!(b, [2, 3, 4]);
let a = ["1", "2a", "3"];
let b = array_util::try_map(a, |v| v.parse::<u32>());
assert!(b.is_err());
§Limitations
These functions aren’t stabilized because they rely on undecided behaviors.
For example, “should compile-time errors be generated for 0
length
arrays?” or “What should the associated types and traits of Try
be?”. As
these questions remain unresolved, reliance on the particular answers
this crate has chosen in it’s implementation may make porting to the
eventual stabilized version more painful. If you’re just calling functions,
you’ll probably be fine, but try to avoid using the Ext
traits as bounds.
Structs§
- Array
Chunks - An iterator over a slice in (non-overlapping) chunks (
N
elements at a time), starting at the beginning of the slice. - Array
Chunks Mut - An iterator over a slice in (non-overlapping) mutable chunks (
N
elements at a time), starting at the beginning of the slice.
Traits§
- Array
Ext - A helper extension trait for arrays
- Slice
Ext - A helper extension trait for slices
- Slice
OfArray Ext - A helper extension trait for slices of arrays
Functions§
- array_
chunks - Returns an iterator over
N
elements of the slice at a time, starting at the beginning of the slice. - array_
chunks_ mut - Returns an iterator over
N
elements of the slice at a time, starting at the beginning of the slice. - as_
chunks - Splits the slice into a slice of
N
-element arrays, starting at the beginning of the slice, and a remainder slice with length strictly less thanN
. - as_
chunks_ mut - Splits the slice into a slice of
N
-element arrays, starting at the beginning of the slice, and a remainder slice with length strictly less thanN
. - as_
chunks_ ⚠unchecked - Splits the slice into a slice of
N
-element arrays, assuming that there’s no remainder. - as_
chunks_ ⚠unchecked_ mut - Splits the slice into a slice of
N
-element arrays, assuming that there’s no remainder. - as_
rchunks - Splits the slice into a slice of
N
-element arrays, starting at the end of the slice, and a remainder slice with length strictly less thanN
. - as_
rchunks_ mut - Splits the slice into a slice of
N
-element arrays, starting at the end of the slice, and a remainder slice with length strictly less thanN
. - flatten
- Takes a
&[[T; N]]
, and flattens it to a&[T]
. - flatten_
mut - Takes a
&mut [[T; N]]
, and flattens it to a&mut [T]
. - try_
from_ fn - Creates an array
[T; N]
where each fallible array elementT
is returned by thecb
call. Unlikefrom_fn
, where the element creation can’t fail, this version will return an error if any element creation was unsuccessful. - try_map
- A fallible function
f
applied to each element on arrayself
in order to return an array the same size asself
or the first error encountered.