core_json_traits/
sequences.rs1use 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}