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}