array_bytes/op/
vec.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// self
use crate::prelude::*;

/// Convert `Vec<T>` to `[T; N]`.
///
/// # Examples
/// ```
/// assert_eq!(array_bytes::vec2array::<_, 8>(vec![0; 8]), Ok([0; 8]));
/// ```
pub fn vec2array<T, const N: usize>(vec: Vec<T>) -> Result<[T; N]> {
	vec.try_into().map_err(|_| Error::MismatchedLength { expect: N })
}
#[test]
fn vec2array_should_work() {
	assert_eq!(vec2array::<_, 8>(alloc::vec![0; 8]), Ok([0; 8]));
}

/// Convert `Vec<T>` to `V` where `V: From<[T; N]>`.
///
/// # Examples
///
/// ```
/// #[derive(Debug, PartialEq)]
/// struct Ljf([u8; 17]);
/// impl From<[u8; 17]> for Ljf {
/// 	fn from(array: [u8; 17]) -> Self {
/// 		Self(array)
/// 	}
/// }
///
/// assert_eq!(
/// 	array_bytes::vec_n_into::<u8, Ljf, 17>(b"Love Jane Forever".to_vec()),
/// 	Ok(Ljf(*b"Love Jane Forever"))
/// );
/// ```
pub fn vec_n_into<T, V, const N: usize>(vec: Vec<T>) -> Result<V>
where
	V: From<[T; N]>,
{
	Ok(vec2array(vec)?.into())
}
#[test]
fn vec_n_into_should_work() {
	assert_eq!(
		vec_n_into::<u8, Ljfn, 17>(b"Love Jane Forever".to_vec()),
		Ok(Ljfn(*b"Love Jane Forever"))
	);
}