perde_core/decode/
frozen_set.rs1use crate::{
2 error::Convert,
3 schema::*,
4 types::{self, Object},
5};
6use serde::de::{DeserializeSeed, Deserializer, SeqAccess, Visitor};
7use std::fmt;
8
9pub struct FrozenSetVisitor<'a>(pub &'a FrozenSet);
10
11impl<'a, 'de> Visitor<'de> for FrozenSetVisitor<'a> {
12 type Value = Object;
13
14 fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
15 write!(f, "a frozen 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 let set = types::FrozenSet::from_iter(&set.into_inner()).de()?;
29 Ok(set.into_inner())
30 }
31}
32
33impl<'a, 'de> DeserializeSeed<'de> for &'a FrozenSet {
34 type Value = Object;
35
36 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
37 where
38 D: Deserializer<'de>,
39 {
40 deserializer.deserialize_seq(FrozenSetVisitor(self))
41 }
42}