typeshare_model/
config.rs1use serde::{de, ser};
6
7#[derive(Debug, Clone, Copy, Default)]
10pub struct Unconfigured;
11
12struct DeadKey;
13
14impl<'de> de::Deserialize<'de> for DeadKey {
15 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
16 where
17 D: de::Deserializer<'de>,
18 {
19 deserializer.deserialize_identifier({
20 struct Visitor;
21
22 impl<'de> de::Visitor<'de> for Visitor {
23 type Value = DeadKey;
24
25 fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
26 formatter.write_str("a struct key")
27 }
28
29 fn visit_str<E>(self, _v: &str) -> Result<Self::Value, E>
30 where
31 E: de::Error,
32 {
33 Ok(DeadKey)
34 }
35
36 fn visit_bytes<E>(self, _v: &[u8]) -> Result<Self::Value, E>
37 where
38 E: de::Error,
39 {
40 Ok(DeadKey)
41 }
42 }
43
44 Visitor
45 })
46 }
47}
48
49impl ser::Serialize for Unconfigured {
50 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
51 where
52 S: serde::Serializer,
53 {
54 use ser::SerializeStruct as _;
55
56 serializer.serialize_struct("Unconfigured", 0)?.end()
57 }
58}
59
60impl<'de> serde::Deserialize<'de> for Unconfigured {
61 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
62 where
63 D: serde::Deserializer<'de>,
64 {
65 deserializer.deserialize_struct("Unconfigured", &[], {
66 struct Visitor;
67
68 impl<'de> de::Visitor<'de> for Visitor {
69 type Value = Unconfigured;
70
71 fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
72 write!(formatter, "an empty struct")
73 }
74
75 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
76 where
77 A: de::MapAccess<'de>,
78 {
79 while let Some((DeadKey, de::IgnoredAny)) = map.next_entry()? {}
80 Ok(Unconfigured)
81 }
82 }
83
84 Visitor
85 })
86 }
87}