#[repr(transparent)]pub struct Array<T, const N: usize>(_);Expand description
An array that exposes each element through their Miniconf implementation.
Design
Miniconf supports homogeneous arrays of items contained in structures using two forms. For the
miniconf::Array, each item of the array is accessed as a Miniconf tree.
For standard arrays of [T; N] form, by default the entire array is accessed as one atomic
value. By adding the #[miniconf(defer)] attribute, each index of the array is is instead accessed as
one atomic value (i.e. a single Miniconf item).
The type you should use depends on what data is contained in your array. If your array contains
Miniconf items, you can (and often want to) use Array and the #[miniconf(defer)] attribute.
However, if each element in your list is individually configurable as a single value (e.g. a list
of u32), then you must use a standard [T; N] array but you may optionally
#[miniconf(defer)] access to individual indices.
Construction
An Array can be constructed using From<[T; N]>/Into<miniconf::Array>
and the contained value can be accessed through Deref/DerefMut.
Methods from Deref<Target = [T; N]>§
sourcepub fn as_ascii(&self) -> Option<&[AsciiChar; N]>
🔬This is a nightly-only experimental API. (ascii_char)
pub fn as_ascii(&self) -> Option<&[AsciiChar; N]>
ascii_char)Converts this array of bytes into a array of ASCII characters,
or returns None if any of the characters is non-ASCII.
Examples
#![feature(ascii_char)]
#![feature(const_option)]
const HEX_DIGITS: [std::ascii::Char; 16] =
*b"0123456789abcdef".as_ascii().unwrap();
assert_eq!(HEX_DIGITS[1].as_str(), "1");
assert_eq!(HEX_DIGITS[10].as_str(), "a");sourcepub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar; N]
🔬This is a nightly-only experimental API. (ascii_char)
pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar; N]
ascii_char)Converts this array of bytes into a array of ASCII characters, without checking whether they’re valid.
Safety
Every byte in the array must be in 0..=127, or else this is UB.
1.57.0 · sourcepub fn as_slice(&self) -> &[T]
pub fn as_slice(&self) -> &[T]
Returns a slice containing the entire array. Equivalent to &s[..].
1.57.0 · sourcepub fn as_mut_slice(&mut self) -> &mut [T]
pub fn as_mut_slice(&mut self) -> &mut [T]
Returns a mutable slice containing the entire array. Equivalent to
&mut s[..].
sourcepub fn each_ref(&self) -> [&T; N]
🔬This is a nightly-only experimental API. (array_methods)
pub fn each_ref(&self) -> [&T; N]
array_methods)Borrows each element and returns an array of references with the same
size as self.
Example
#![feature(array_methods)]
let floats = [3.1, 2.7, -1.0];
let float_refs: [&f64; 3] = floats.each_ref();
assert_eq!(float_refs, [&3.1, &2.7, &-1.0]);This method is particularly useful if combined with other methods, like
map. This way, you can avoid moving the original
array if its elements are not Copy.
#![feature(array_methods)]
let strings = ["Ferris".to_string(), "♥".to_string(), "Rust".to_string()];
let is_ascii = strings.each_ref().map(|s| s.is_ascii());
assert_eq!(is_ascii, [true, false, true]);
// We can still access the original array: it has not been moved.
assert_eq!(strings.len(), 3);sourcepub fn each_mut(&mut self) -> [&mut T; N]
🔬This is a nightly-only experimental API. (array_methods)
pub fn each_mut(&mut self) -> [&mut T; N]
array_methods)Borrows each element mutably and returns an array of mutable references
with the same size as self.
Example
#![feature(array_methods)]
let mut floats = [3.1, 2.7, -1.0];
let float_refs: [&mut f64; 3] = floats.each_mut();
*float_refs[0] = 0.0;
assert_eq!(float_refs, [&mut 0.0, &mut 2.7, &mut -1.0]);
assert_eq!(floats, [0.0, 2.7, -1.0]);sourcepub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])
🔬This is a nightly-only experimental API. (split_array)
pub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])
split_array)Divides one array reference into two at an index.
The first will contain all indices from [0, M) (excluding
the index M itself) and the second will contain all
indices from [M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let v = [1, 2, 3, 4, 5, 6];
{
let (left, right) = v.split_array_ref::<0>();
assert_eq!(left, &[]);
assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}
{
let (left, right) = v.split_array_ref::<2>();
assert_eq!(left, &[1, 2]);
assert_eq!(right, &[3, 4, 5, 6]);
}
{
let (left, right) = v.split_array_ref::<6>();
assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
assert_eq!(right, &[]);
}sourcepub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T])
🔬This is a nightly-only experimental API. (split_array)
pub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T])
split_array)Divides one mutable array reference into two at an index.
The first will contain all indices from [0, M) (excluding
the index M itself) and the second will contain all
indices from [M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let mut v = [1, 0, 3, 0, 5, 6];
let (left, right) = v.split_array_mut::<2>();
assert_eq!(left, &mut [1, 0][..]);
assert_eq!(right, &mut [3, 0, 5, 6]);
left[1] = 2;
right[1] = 4;
assert_eq!(v, [1, 2, 3, 4, 5, 6]);sourcepub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])
🔬This is a nightly-only experimental API. (split_array)
pub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])
split_array)Divides one array reference into two at an index from the end.
The first will contain all indices from [0, N - M) (excluding
the index N - M itself) and the second will contain all
indices from [N - M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let v = [1, 2, 3, 4, 5, 6];
{
let (left, right) = v.rsplit_array_ref::<0>();
assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
assert_eq!(right, &[]);
}
{
let (left, right) = v.rsplit_array_ref::<2>();
assert_eq!(left, &[1, 2, 3, 4]);
assert_eq!(right, &[5, 6]);
}
{
let (left, right) = v.rsplit_array_ref::<6>();
assert_eq!(left, &[]);
assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}sourcepub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M])
🔬This is a nightly-only experimental API. (split_array)
pub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M])
split_array)Divides one mutable array reference into two at an index from the end.
The first will contain all indices from [0, N - M) (excluding
the index N - M itself) and the second will contain all
indices from [N - M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let mut v = [1, 0, 3, 0, 5, 6];
let (left, right) = v.rsplit_array_mut::<4>();
assert_eq!(left, &mut [1, 0]);
assert_eq!(right, &mut [3, 0, 5, 6][..]);
left[1] = 2;
right[1] = 4;
assert_eq!(v, [1, 2, 3, 4, 5, 6]);Trait Implementations§
source§impl<'a, T, const N: usize> IntoIterator for &'a Array<T, N>
impl<'a, T, const N: usize> IntoIterator for &'a Array<T, N>
source§impl<'a, T, const N: usize> IntoIterator for &'a mut Array<T, N>
impl<'a, T, const N: usize> IntoIterator for &'a mut Array<T, N>
source§impl<T, const N: usize> IntoIterator for Array<T, N>
impl<T, const N: usize> IntoIterator for Array<T, N>
source§impl<T: Miniconf, const N: usize> Miniconf for Array<T, N>
impl<T: Miniconf, const N: usize> Miniconf for Array<T, N>
source§fn set_path<'a, P: Peekable<Item = &'a str>>(
&mut self,
path_parts: &'a mut P,
value: &[u8]
) -> Result<usize, Error>
fn set_path<'a, P: Peekable<Item = &'a str>>( &mut self, path_parts: &'a mut P, value: &[u8] ) -> Result<usize, Error>
source§fn get_path<'a, P: Peekable<Item = &'a str>>(
&self,
path_parts: &'a mut P,
value: &mut [u8]
) -> Result<usize, Error>
fn get_path<'a, P: Peekable<Item = &'a str>>( &self, path_parts: &'a mut P, value: &mut [u8] ) -> Result<usize, Error>
source§fn next_path<const TS: usize>(
state: &mut [usize],
topic: &mut String<TS>
) -> Result<bool, IterError>
fn next_path<const TS: usize>( state: &mut [usize], topic: &mut String<TS> ) -> Result<bool, IterError>
source§fn set(&mut self, path: &str, data: &[u8]) -> Result<usize, Error>
fn set(&mut self, path: &str, data: &[u8]) -> Result<usize, Error>
source§fn get(&self, path: &str, data: &mut [u8]) -> Result<usize, Error>
fn get(&self, path: &str, data: &mut [u8]) -> Result<usize, Error>
source§fn iter_paths<const L: usize, const TS: usize>(
) -> Result<MiniconfIter<Self, L, TS>, IterError>
fn iter_paths<const L: usize, const TS: usize>( ) -> Result<MiniconfIter<Self, L, TS>, IterError>
source§fn unchecked_iter_paths<const L: usize, const TS: usize>(
count: Option<usize>
) -> MiniconfIter<Self, L, TS> ⓘ
fn unchecked_iter_paths<const L: usize, const TS: usize>( count: Option<usize> ) -> MiniconfIter<Self, L, TS> ⓘ
source§impl<T: Ord, const N: usize> Ord for Array<T, N>
impl<T: Ord, const N: usize> Ord for Array<T, N>
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere Self: Sized,
source§impl<T: PartialEq, const N: usize> PartialEq<Array<T, N>> for Array<T, N>
impl<T: PartialEq, const N: usize> PartialEq<Array<T, N>> for Array<T, N>
source§impl<T: PartialOrd, const N: usize> PartialOrd<Array<T, N>> for Array<T, N>
impl<T: PartialOrd, const N: usize> PartialOrd<Array<T, N>> for Array<T, N>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read more