serde_deserialize_over/support/
array.rs1use crate::{DeserializeOver, DeserializeOverWrapper};
2use serde::{
3 de::{SeqAccess, Visitor},
4 Deserializer,
5};
6use std::fmt;
7
8struct ArrayVisitor<'a, T, const N: usize>(&'a mut [T; N]);
9
10impl<'de, 'a, T, const N: usize> Visitor<'de> for ArrayVisitor<'a, T, N>
11where
12 T: DeserializeOver<'de>,
13{
14 type Value = ();
15
16 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
17 fmt.write_fmt(format_args!("an array of length {}", N))
18 }
19
20 fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
21 where
22 A: SeqAccess<'de>,
23 {
24 for item in self.0.iter_mut() {
25 if let None = seq.next_element_seed(DeserializeOverWrapper(item))? {
26 break;
27 }
28 }
29
30 Ok(())
31 }
32}
33
34impl<'de, T, const N: usize> DeserializeOver<'de> for [T; N]
35where
36 T: DeserializeOver<'de>,
37{
38 fn deserialize_over<D>(&mut self, de: D) -> Result<(), D::Error>
39 where
40 D: Deserializer<'de>,
41 {
42 de.deserialize_tuple(self.len(), ArrayVisitor(self))
43 }
44}