1use crate::{
2 error::Convert,
3 schema::*,
4 types::{self, Object},
5};
6use serde::de::{DeserializeSeed, Deserializer, SeqAccess, Visitor};
7use std::fmt;
8
9pub struct SetVisitor<'a>(pub &'a Set);
10
11impl<'a, 'de> Visitor<'de> for SetVisitor<'a> {
12 type Value = Object;
13
14 fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
15 write!(f, "a set")
16 }
17
18 fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
19 where
20 A: SeqAccess<'de>,
21 {
22 let mut set = types::Set::new().de()?;
23
24 while let Some(value) = seq.next_element_seed(&*self.0.value)? {
25 set.set(value).de()?;
26 }
27
28 Ok(set.into_inner())
29 }
30}
31
32impl<'a, 'de> DeserializeSeed<'de> for &'a Set {
33 type Value = Object;
34
35 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
36 where
37 D: Deserializer<'de>,
38 {
39 deserializer.deserialize_seq(SetVisitor(self))
40 }
41}