1use serde::{
2 ser::{
3 SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant, SerializeTuple,
4 SerializeTupleStruct, SerializeTupleVariant,
5 },
6 Serialize, Serializer,
7};
8
9pub(crate) struct AlphaSerializer<'a, S, A> {
12 pub inner: S,
13 pub alpha: &'a A,
14}
15
16impl<'a, S, A> Serializer for AlphaSerializer<'a, S, A>
17where
18 S: Serializer,
19 A: Serialize,
20{
21 type Ok = S::Ok;
22
23 type Error = S::Error;
24
25 type SerializeSeq = AlphaSerializer<'a, S::SerializeSeq, A>;
26
27 type SerializeTuple = AlphaSerializer<'a, S::SerializeTuple, A>;
28
29 type SerializeTupleStruct = AlphaSerializer<'a, S::SerializeTupleStruct, A>;
30
31 type SerializeTupleVariant = AlphaSerializer<'a, S::SerializeTupleVariant, A>;
32
33 type SerializeMap = AlphaSerializer<'a, S::SerializeMap, A>;
34
35 type SerializeStruct = AlphaSerializer<'a, S::SerializeStruct, A>;
36
37 type SerializeStructVariant = AlphaSerializer<'a, S::SerializeStructVariant, A>;
38
39 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
40 Ok(AlphaSerializer {
41 inner: self.inner.serialize_seq(len.map(|len| len + 1))?,
42 alpha: self.alpha,
43 })
44 }
45
46 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
47 Ok(AlphaSerializer {
48 inner: self.inner.serialize_tuple(len + 1)?,
49 alpha: self.alpha,
50 })
51 }
52
53 fn serialize_tuple_struct(
54 self,
55 name: &'static str,
56 len: usize,
57 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
58 Ok(AlphaSerializer {
59 inner: self.inner.serialize_tuple_struct(name, len + 1)?,
60 alpha: self.alpha,
61 })
62 }
63
64 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
65 Ok(AlphaSerializer {
66 inner: self.inner.serialize_map(len.map(|len| len + 1))?,
67 alpha: self.alpha,
68 })
69 }
70
71 fn serialize_struct(
72 self,
73 name: &'static str,
74 len: usize,
75 ) -> Result<Self::SerializeStruct, Self::Error> {
76 Ok(AlphaSerializer {
77 inner: self.inner.serialize_struct(name, len + 1)?,
78 alpha: self.alpha,
79 })
80 }
81
82 fn serialize_newtype_struct<T>(
83 self,
84 name: &'static str,
85 value: &T,
86 ) -> Result<Self::Ok, Self::Error>
87 where
88 T: serde::Serialize + ?Sized,
89 {
90 let mut serializer = self.serialize_tuple_struct(name, 1)?;
91 serializer.serialize_field(value)?;
92 serializer.end()
93 }
94
95 fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
96 self.inner.serialize_newtype_struct(name, self.alpha)
97 }
98
99 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
100 self.serialize_tuple(0)?.end()
101 }
102
103 fn serialize_bool(self, _v: bool) -> Result<Self::Ok, Self::Error> {
106 alpha_serializer_error()
107 }
108
109 fn serialize_i8(self, _v: i8) -> Result<Self::Ok, Self::Error> {
110 alpha_serializer_error()
111 }
112
113 fn serialize_i16(self, _v: i16) -> Result<Self::Ok, Self::Error> {
114 alpha_serializer_error()
115 }
116
117 fn serialize_i32(self, _v: i32) -> Result<Self::Ok, Self::Error> {
118 alpha_serializer_error()
119 }
120
121 fn serialize_i64(self, _v: i64) -> Result<Self::Ok, Self::Error> {
122 alpha_serializer_error()
123 }
124
125 fn serialize_u8(self, _v: u8) -> Result<Self::Ok, Self::Error> {
126 alpha_serializer_error()
127 }
128
129 fn serialize_u16(self, _v: u16) -> Result<Self::Ok, Self::Error> {
130 alpha_serializer_error()
131 }
132
133 fn serialize_u32(self, _v: u32) -> Result<Self::Ok, Self::Error> {
134 alpha_serializer_error()
135 }
136
137 fn serialize_u64(self, _v: u64) -> Result<Self::Ok, Self::Error> {
138 alpha_serializer_error()
139 }
140
141 fn serialize_f32(self, _v: f32) -> Result<Self::Ok, Self::Error> {
142 alpha_serializer_error()
143 }
144
145 fn serialize_f64(self, _v: f64) -> Result<Self::Ok, Self::Error> {
146 alpha_serializer_error()
147 }
148
149 fn serialize_char(self, _v: char) -> Result<Self::Ok, Self::Error> {
150 alpha_serializer_error()
151 }
152
153 fn serialize_str(self, _v: &str) -> Result<Self::Ok, Self::Error> {
154 alpha_serializer_error()
155 }
156
157 fn serialize_bytes(self, _v: &[u8]) -> Result<Self::Ok, Self::Error> {
158 alpha_serializer_error()
159 }
160
161 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
162 alpha_serializer_error()
163 }
164
165 fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok, Self::Error>
166 where
167 T: serde::Serialize + ?Sized,
168 {
169 alpha_serializer_error()
170 }
171
172 fn serialize_tuple_variant(
173 self,
174 _name: &'static str,
175 _variant_index: u32,
176 _variant: &'static str,
177 _len: usize,
178 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
179 alpha_serializer_error()
180 }
181
182 fn serialize_struct_variant(
183 self,
184 _name: &'static str,
185 _variant_index: u32,
186 _variant: &'static str,
187 _len: usize,
188 ) -> Result<Self::SerializeStructVariant, Self::Error> {
189 alpha_serializer_error()
190 }
191
192 fn serialize_unit_variant(
193 self,
194 _name: &'static str,
195 _variant_index: u32,
196 _variant: &'static str,
197 ) -> Result<Self::Ok, Self::Error> {
198 alpha_serializer_error()
199 }
200
201 fn serialize_newtype_variant<T>(
202 self,
203 _name: &'static str,
204 _variant_index: u32,
205 _variant: &'static str,
206 _value: &T,
207 ) -> Result<Self::Ok, Self::Error>
208 where
209 T: serde::Serialize + ?Sized,
210 {
211 alpha_serializer_error()
212 }
213
214 fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
215 let _ = v;
216 alpha_serializer_error()
217 }
218
219 fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
220 let _ = v;
221 alpha_serializer_error()
222 }
223
224 fn is_human_readable(&self) -> bool {
225 self.inner.is_human_readable()
226 }
227}
228
229fn alpha_serializer_error() -> ! {
230 unimplemented!("AlphaSerializer can only serialize structs, maps and sequences")
231}
232
233impl<'a, S, A> SerializeSeq for AlphaSerializer<'a, S, A>
234where
235 S: SerializeSeq,
236 A: Serialize,
237{
238 type Ok = S::Ok;
239
240 type Error = S::Error;
241
242 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
243 where
244 T: Serialize + ?Sized,
245 {
246 self.inner.serialize_element(value)
247 }
248
249 fn end(mut self) -> Result<Self::Ok, Self::Error> {
250 self.inner.serialize_element(self.alpha)?;
251 self.inner.end()
252 }
253}
254
255impl<'a, S, A> SerializeTuple for AlphaSerializer<'a, S, A>
256where
257 S: SerializeTuple,
258 A: Serialize,
259{
260 type Ok = S::Ok;
261
262 type Error = S::Error;
263
264 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
265 where
266 T: Serialize + ?Sized,
267 {
268 self.inner.serialize_element(value)
269 }
270
271 fn end(mut self) -> Result<Self::Ok, Self::Error> {
272 self.inner.serialize_element(self.alpha)?;
273 self.inner.end()
274 }
275}
276
277impl<'a, S, A> SerializeTupleStruct for AlphaSerializer<'a, S, A>
278where
279 S: SerializeTupleStruct,
280 A: Serialize,
281{
282 type Ok = S::Ok;
283
284 type Error = S::Error;
285
286 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
287 where
288 T: Serialize + ?Sized,
289 {
290 self.inner.serialize_field(value)
291 }
292
293 fn end(mut self) -> Result<Self::Ok, Self::Error> {
294 self.inner.serialize_field(self.alpha)?;
295 self.inner.end()
296 }
297}
298
299impl<'a, S, A> SerializeTupleVariant for AlphaSerializer<'a, S, A>
300where
301 S: SerializeTupleVariant,
302 A: Serialize,
303{
304 type Ok = S::Ok;
305
306 type Error = S::Error;
307
308 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
309 where
310 T: Serialize + ?Sized,
311 {
312 self.inner.serialize_field(value)
313 }
314
315 fn end(mut self) -> Result<Self::Ok, Self::Error> {
316 self.inner.serialize_field(self.alpha)?;
317 self.inner.end()
318 }
319}
320
321impl<'a, S, A> SerializeMap for AlphaSerializer<'a, S, A>
322where
323 S: SerializeMap,
324 A: Serialize,
325{
326 type Ok = S::Ok;
327
328 type Error = S::Error;
329
330 fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error>
331 where
332 T: Serialize + ?Sized,
333 {
334 self.inner.serialize_key(key)
335 }
336
337 fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
338 where
339 T: Serialize + ?Sized,
340 {
341 self.inner.serialize_value(value)
342 }
343
344 fn serialize_entry<K, V>(&mut self, key: &K, value: &V) -> Result<(), Self::Error>
345 where
346 K: Serialize + ?Sized,
347 V: Serialize + ?Sized,
348 {
349 self.inner.serialize_entry(key, value)
350 }
351
352 fn end(mut self) -> Result<Self::Ok, Self::Error> {
353 self.inner.serialize_entry("alpha", self.alpha)?;
354 self.inner.end()
355 }
356}
357
358impl<'a, S, A> SerializeStruct for AlphaSerializer<'a, S, A>
359where
360 S: SerializeStruct,
361 A: Serialize,
362{
363 type Ok = S::Ok;
364
365 type Error = S::Error;
366
367 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
368 where
369 T: Serialize + ?Sized,
370 {
371 self.inner.serialize_field(key, value)
372 }
373
374 fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
375 self.inner.skip_field(key)
376 }
377
378 fn end(mut self) -> Result<Self::Ok, Self::Error> {
379 self.inner.serialize_field("alpha", self.alpha)?;
380 self.inner.end()
381 }
382}
383
384impl<'a, S, A> SerializeStructVariant for AlphaSerializer<'a, S, A>
385where
386 S: SerializeStructVariant,
387 A: Serialize,
388{
389 type Ok = S::Ok;
390
391 type Error = S::Error;
392
393 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
394 where
395 T: Serialize + ?Sized,
396 {
397 self.inner.serialize_field(key, value)
398 }
399
400 fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
401 self.inner.skip_field(key)
402 }
403
404 fn end(mut self) -> Result<Self::Ok, Self::Error> {
405 self.inner.serialize_field("alpha", self.alpha)?;
406 self.inner.end()
407 }
408}