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}