Skip to main content

perde_core/decode/
mod.rs

1use crate::{schema::*, types::Object};
2use serde::de::{DeserializeSeed, Deserializer};
3
4pub mod class;
5pub mod dict;
6pub mod enums;
7pub mod frozen_set;
8pub mod list;
9pub mod object;
10pub mod option;
11pub mod primitive;
12pub mod set;
13pub mod tuple;
14pub mod union;
15
16impl<'a, 'de> DeserializeSeed<'de> for &'a Schema {
17    type Value = Object;
18
19    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
20    where
21        D: Deserializer<'de>,
22    {
23        match self {
24            Schema::Primitive(p) => p.deserialize(deserializer),
25            Schema::Dict(d) => d.deserialize(deserializer),
26            Schema::List(l) => l.deserialize(deserializer),
27            Schema::Set(s) => s.deserialize(deserializer),
28            Schema::FrozenSet(s) => s.deserialize(deserializer),
29            Schema::Tuple(t) => t.deserialize(deserializer),
30            Schema::Class(c) => c.deserialize(deserializer),
31            Schema::Enum(e) => e.deserialize(deserializer),
32            Schema::Optional(o) => o.deserialize(deserializer),
33            Schema::Union(u) => u.deserialize(deserializer),
34            Schema::Any(a) => a.deserialize(deserializer),
35        }
36    }
37}