core_json_traits/
sequences.rs

1use crate::{BytesLike, Stack, JsonError, Value, JsonDeserialize};
2
3impl<T: 'static + Default + JsonDeserialize, const N: usize> JsonDeserialize for [T; N] {
4  fn deserialize<'bytes, 'parent, B: BytesLike<'bytes>, S: Stack>(
5    value: Value<'bytes, 'parent, B, S>,
6  ) -> Result<Self, JsonError<'bytes, B, S>> {
7    let mut res: Self = core::array::from_fn(|_| Default::default());
8    let mut iter = value.iterate()?;
9    let mut i = 0;
10    while let Some(item) = iter.next() {
11      if i == N {
12        Err(JsonError::TypeError)?;
13      }
14      res[i] = T::deserialize(item?)?;
15      i += 1;
16    }
17    if i != N {
18      Err(JsonError::TypeError)?;
19    }
20    Ok(res)
21  }
22}
23
24#[cfg(feature = "alloc")]
25use alloc::{vec, vec::Vec};
26#[cfg(feature = "alloc")]
27impl<T: 'static + JsonDeserialize> JsonDeserialize for Vec<T> {
28  fn deserialize<'bytes, 'parent, B: BytesLike<'bytes>, S: Stack>(
29    value: Value<'bytes, 'parent, B, S>,
30  ) -> Result<Self, JsonError<'bytes, B, S>> {
31    let mut res = vec![];
32    let mut iter = value.iterate()?;
33    while let Some(item) = iter.next() {
34      res.push(T::deserialize(item?)?);
35    }
36    Ok(res)
37  }
38}