1use toml_writer::TomlWrite as _;
2
3use super::Error;
4use crate::alloc_prelude::*;
5
6pub(crate) struct KeySerializer<'d> {
7 pub(crate) dst: &'d mut String,
8}
9
10impl serde::ser::Serializer for KeySerializer<'_> {
11 type Ok = ();
12 type Error = Error;
13 type SerializeSeq = serde::ser::Impossible<Self::Ok, Error>;
14 type SerializeTuple = serde::ser::Impossible<Self::Ok, Error>;
15 type SerializeTupleStruct = serde::ser::Impossible<Self::Ok, Error>;
16 type SerializeTupleVariant = serde::ser::Impossible<Self::Ok, Error>;
17 type SerializeMap = serde::ser::Impossible<Self::Ok, Error>;
18 type SerializeStruct = serde::ser::Impossible<Self::Ok, Error>;
19 type SerializeStructVariant = serde::ser::Impossible<Self::Ok, Error>;
20
21 fn serialize_bool(self, _v: bool) -> Result<Self::Ok, Self::Error> {
22 Err(Error::key_not_string())
23 }
24
25 fn serialize_i8(self, _v: i8) -> Result<Self::Ok, Self::Error> {
26 Err(Error::key_not_string())
27 }
28
29 fn serialize_i16(self, _v: i16) -> Result<Self::Ok, Self::Error> {
30 Err(Error::key_not_string())
31 }
32
33 fn serialize_i32(self, _v: i32) -> Result<Self::Ok, Self::Error> {
34 Err(Error::key_not_string())
35 }
36
37 fn serialize_i64(self, _v: i64) -> Result<Self::Ok, Self::Error> {
38 Err(Error::key_not_string())
39 }
40
41 fn serialize_u8(self, _v: u8) -> Result<Self::Ok, Self::Error> {
42 Err(Error::key_not_string())
43 }
44
45 fn serialize_u16(self, _v: u16) -> Result<Self::Ok, Self::Error> {
46 Err(Error::key_not_string())
47 }
48
49 fn serialize_u32(self, _v: u32) -> Result<Self::Ok, Self::Error> {
50 Err(Error::key_not_string())
51 }
52
53 fn serialize_u64(self, _v: u64) -> Result<Self::Ok, Self::Error> {
54 Err(Error::key_not_string())
55 }
56
57 fn serialize_f32(self, _v: f32) -> Result<Self::Ok, Self::Error> {
58 Err(Error::key_not_string())
59 }
60
61 fn serialize_f64(self, _v: f64) -> Result<Self::Ok, Self::Error> {
62 Err(Error::key_not_string())
63 }
64
65 fn serialize_char(self, _v: char) -> Result<Self::Ok, Self::Error> {
66 Err(Error::key_not_string())
67 }
68
69 fn serialize_str(self, value: &str) -> Result<Self::Ok, Self::Error> {
70 self.dst.key(value)?;
71 Ok(())
72 }
73
74 fn serialize_bytes(self, _value: &[u8]) -> Result<Self::Ok, Self::Error> {
75 Err(Error::key_not_string())
76 }
77
78 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
79 Err(Error::key_not_string())
80 }
81
82 fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok, Self::Error>
83 where
84 T: serde::ser::Serialize + ?Sized,
85 {
86 Err(Error::key_not_string())
87 }
88
89 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
90 Err(Error::key_not_string())
91 }
92
93 fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok, Self::Error> {
94 Err(Error::key_not_string())
95 }
96
97 fn serialize_unit_variant(
98 self,
99 _name: &'static str,
100 _variant_index: u32,
101 variant: &'static str,
102 ) -> Result<Self::Ok, Self::Error> {
103 self.dst.key(variant)?;
104 Ok(())
105 }
106
107 fn serialize_newtype_struct<T>(
108 self,
109 _name: &'static str,
110 value: &T,
111 ) -> Result<Self::Ok, Self::Error>
112 where
113 T: serde::ser::Serialize + ?Sized,
114 {
115 value.serialize(self)
116 }
117
118 fn serialize_newtype_variant<T>(
119 self,
120 _name: &'static str,
121 _variant_index: u32,
122 _variant: &'static str,
123 _value: &T,
124 ) -> Result<Self::Ok, Self::Error>
125 where
126 T: serde::ser::Serialize + ?Sized,
127 {
128 Err(Error::key_not_string())
129 }
130
131 fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
132 Err(Error::key_not_string())
133 }
134
135 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Self::Error> {
136 Err(Error::key_not_string())
137 }
138
139 fn serialize_tuple_struct(
140 self,
141 _name: &'static str,
142 _len: usize,
143 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
144 Err(Error::key_not_string())
145 }
146
147 fn serialize_tuple_variant(
148 self,
149 _name: &'static str,
150 _variant_index: u32,
151 _variant: &'static str,
152 _len: usize,
153 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
154 Err(Error::key_not_string())
155 }
156
157 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
158 Err(Error::key_not_string())
159 }
160
161 fn serialize_struct(
162 self,
163 _name: &'static str,
164 _len: usize,
165 ) -> Result<Self::SerializeStruct, Self::Error> {
166 Err(Error::key_not_string())
167 }
168
169 fn serialize_struct_variant(
170 self,
171 _name: &'static str,
172 _variant_index: u32,
173 _variant: &'static str,
174 _len: usize,
175 ) -> Result<Self::SerializeStructVariant, Self::Error> {
176 Err(Error::key_not_string())
177 }
178}