array_bytes/op/
vec.rs

1// self
2use crate::prelude::*;
3
4/// Convert `Vec<T>` to `[T; N]`.
5///
6/// # Examples
7/// ```
8/// assert_eq!(array_bytes::vec2array::<_, 8>(vec![0; 8]), Ok([0; 8]));
9/// ```
10pub fn vec2array<T, const N: usize>(vec: Vec<T>) -> Result<[T; N]> {
11	vec.try_into().map_err(|_| Error::MismatchedLength { expect: N })
12}
13#[test]
14fn vec2array_should_work() {
15	assert_eq!(vec2array::<_, 8>(alloc::vec![0; 8]), Ok([0; 8]));
16}
17
18/// Convert `Vec<T>` to `V` where `V: From<[T; N]>`.
19///
20/// # Examples
21///
22/// ```
23/// #[derive(Debug, PartialEq)]
24/// struct Ljf([u8; 17]);
25/// impl From<[u8; 17]> for Ljf {
26/// 	fn from(array: [u8; 17]) -> Self {
27/// 		Self(array)
28/// 	}
29/// }
30///
31/// assert_eq!(
32/// 	array_bytes::vec_n_into::<u8, Ljf, 17>(b"Love Jane Forever".to_vec()),
33/// 	Ok(Ljf(*b"Love Jane Forever"))
34/// );
35/// ```
36pub fn vec_n_into<T, V, const N: usize>(vec: Vec<T>) -> Result<V>
37where
38	V: From<[T; N]>,
39{
40	Ok(vec2array(vec)?.into())
41}
42#[test]
43fn vec_n_into_should_work() {
44	assert_eq!(
45		vec_n_into::<u8, Ljfn, 17>(b"Love Jane Forever".to_vec()),
46		Ok(Ljfn(*b"Love Jane Forever"))
47	);
48}