xref: /aosp_15_r20/external/flatbuffers/rust/flexbuffers/src/builder/ser.rs (revision 890232f25432b36107d06881e0a25aaa6b473652)
1 // Copyright 2019 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 use crate::Builder;
16 use serde::ser;
17 use serde::ser::*;
18 use std::fmt::Display;
19 
20 // This struct internally tracks the nested vectors representing
21 // nested structs and such.
22 // TODO: Add an option field names in a map.
23 /// Flexbuffer Serializer. This should be used to serialize structs.
24 #[derive(Debug, Default)]
25 pub struct FlexbufferSerializer {
26     builder: Builder,
27     nesting: Vec<Option<usize>>,
28 }
29 impl FlexbufferSerializer {
new() -> Self30     pub fn new() -> Self {
31         Self::default()
32     }
view(&self) -> &[u8]33     pub fn view(&self) -> &[u8] {
34         self.builder.view()
35     }
take_buffer(&mut self) -> Vec<u8>36     pub fn take_buffer(&mut self) -> Vec<u8> {
37         self.builder.take_buffer()
38     }
reset(&mut self)39     pub fn reset(&mut self) {
40         self.builder.reset();
41         self.nesting.clear();
42     }
finish_if_not_nested(&mut self) -> Result<(), Error>43     fn finish_if_not_nested(&mut self) -> Result<(), Error> {
44         if self.nesting.is_empty() {
45             assert_eq!(self.builder.values.len(), 1);
46             let root = self.builder.values.pop().unwrap();
47             super::store_root(&mut self.builder.buffer, root);
48         }
49         Ok(())
50     }
start_vector(&mut self)51     fn start_vector(&mut self) {
52         let previous_end = if self.nesting.is_empty() {
53             None
54         } else {
55             Some(self.builder.values.len())
56         };
57         self.nesting.push(previous_end);
58     }
start_map(&mut self)59     fn start_map(&mut self) {
60         let previous_end = if self.nesting.is_empty() {
61             None
62         } else {
63             Some(self.builder.values.len())
64         };
65         self.nesting.push(previous_end);
66     }
end_vector(&mut self) -> Result<(), Error>67     fn end_vector(&mut self) -> Result<(), Error> {
68         let previous_end = self.nesting.pop().unwrap();
69         self.builder.end_map_or_vector(false, previous_end);
70         Ok(())
71     }
end_map(&mut self) -> Result<(), Error>72     fn end_map(&mut self) -> Result<(), Error> {
73         let previous_end = self.nesting.pop().unwrap();
74         self.builder.end_map_or_vector(true, previous_end);
75         Ok(())
76     }
77 }
78 
79 #[derive(Debug)]
80 /// Errors that may happen with Serde.
81 pub enum Error {
82     /// Only `str` and `String` can be serialized as keys in serde maps.
83     KeyMustBeString,
84     Serde(String),
85 }
86 
87 impl std::fmt::Display for Error {
fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error>88     fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
89         write!(f, "{:?}", self)
90     }
91 }
92 impl std::error::Error for Error {}
93 impl ser::Error for Error {
custom<T>(msg: T) -> Self where T: Display,94     fn custom<T>(msg: T) -> Self
95     where
96         T: Display,
97     {
98         Self::Serde(format!("{}", msg))
99     }
100 }
101 impl<'a> ser::SerializeSeq for &mut FlexbufferSerializer {
102     type Ok = ();
103     type Error = Error;
serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> where T: Serialize,104     fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
105     where
106         T: Serialize,
107     {
108         value.serialize(&mut **self)
109     }
end(self) -> Result<Self::Ok, Self::Error>110     fn end(self) -> Result<Self::Ok, Self::Error> {
111         self.end_vector()
112     }
113 }
114 // This is unlike a flexbuffers map which requires CString like keys.
115 // Its implemented as alternating keys and values (hopefully).
116 impl<'a> ser::SerializeMap for &'a mut FlexbufferSerializer {
117     type Ok = ();
118     type Error = Error;
serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), Self::Error> where T: Serialize,119     fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), Self::Error>
120     where
121         T: Serialize,
122     {
123         key.serialize(MapKeySerializer(&mut **self))
124     }
serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> where T: Serialize,125     fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
126     where
127         T: Serialize,
128     {
129         value.serialize(&mut **self)
130     }
end(self) -> Result<Self::Ok, Self::Error>131     fn end(self) -> Result<Self::Ok, Self::Error> {
132         self.end_map()
133     }
134 }
135 impl<'a> ser::SerializeTuple for &mut FlexbufferSerializer {
136     type Ok = ();
137     type Error = Error;
serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> where T: Serialize,138     fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
139     where
140         T: Serialize,
141     {
142         value.serialize(&mut **self)
143     }
end(self) -> Result<Self::Ok, Self::Error>144     fn end(self) -> Result<Self::Ok, Self::Error> {
145         self.end_vector()
146     }
147 }
148 impl<'a> ser::SerializeTupleStruct for &mut FlexbufferSerializer {
149     type Ok = ();
150     type Error = Error;
serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> where T: Serialize,151     fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
152     where
153         T: Serialize,
154     {
155         value.serialize(&mut **self)
156     }
end(self) -> Result<Self::Ok, Self::Error>157     fn end(self) -> Result<Self::Ok, Self::Error> {
158         self.end_vector()
159     }
160 }
161 impl<'a> ser::SerializeStruct for &mut FlexbufferSerializer {
162     type Ok = ();
163     type Error = Error;
serialize_field<T: ?Sized>( &mut self, key: &'static str, value: &T, ) -> Result<(), Self::Error> where T: Serialize,164     fn serialize_field<T: ?Sized>(
165         &mut self,
166         key: &'static str,
167         value: &T,
168     ) -> Result<(), Self::Error>
169     where
170         T: Serialize,
171     {
172         self.builder.push_key(key);
173         value.serialize(&mut **self)
174     }
end(self) -> Result<Self::Ok, Self::Error>175     fn end(self) -> Result<Self::Ok, Self::Error> {
176         self.end_map()
177     }
178 }
179 impl<'a> ser::SerializeTupleVariant for &mut FlexbufferSerializer {
180     type Ok = ();
181     type Error = Error;
serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> where T: Serialize,182     fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
183     where
184         T: Serialize,
185     {
186         value.serialize(&mut **self)
187     }
end(self) -> Result<Self::Ok, Self::Error>188     fn end(self) -> Result<Self::Ok, Self::Error> {
189         self.end_vector()?;
190         self.end_map()
191     }
192 }
193 impl<'a> ser::SerializeStructVariant for &mut FlexbufferSerializer {
194     type Ok = ();
195     type Error = Error;
serialize_field<T: ?Sized>( &mut self, key: &'static str, value: &T, ) -> Result<(), Self::Error> where T: Serialize,196     fn serialize_field<T: ?Sized>(
197         &mut self,
198         key: &'static str,
199         value: &T,
200     ) -> Result<(), Self::Error>
201     where
202         T: Serialize,
203     {
204         self.builder.push_key(key);
205         value.serialize(&mut **self)
206     }
end(self) -> Result<Self::Ok, Self::Error>207     fn end(self) -> Result<Self::Ok, Self::Error> {
208         self.end_map()?;
209         self.end_map()
210     }
211     // TODO: skip field?
212 }
213 
214 impl<'a> ser::Serializer for &'a mut FlexbufferSerializer {
215     type SerializeSeq = &'a mut FlexbufferSerializer;
216     type SerializeTuple = &'a mut FlexbufferSerializer;
217     type SerializeTupleStruct = &'a mut FlexbufferSerializer;
218     type SerializeTupleVariant = &'a mut FlexbufferSerializer;
219     type SerializeMap = &'a mut FlexbufferSerializer;
220     type SerializeStruct = &'a mut FlexbufferSerializer;
221     type SerializeStructVariant = &'a mut FlexbufferSerializer;
222     type Ok = ();
223     type Error = Error;
is_human_readable(&self) -> bool224     fn is_human_readable(&self) -> bool {
225         cfg!(serialize_human_readable)
226     }
serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error>227     fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
228         self.builder.push(v);
229         self.finish_if_not_nested()
230     }
serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error>231     fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
232         self.builder.push(v);
233         self.finish_if_not_nested()
234     }
serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error>235     fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
236         self.builder.push(v);
237         self.finish_if_not_nested()
238     }
serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error>239     fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
240         self.builder.push(v);
241         self.finish_if_not_nested()
242     }
serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>243     fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
244         self.builder.push(v);
245         self.finish_if_not_nested()
246     }
serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error>247     fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
248         self.builder.push(v);
249         self.finish_if_not_nested()
250     }
serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error>251     fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
252         self.builder.push(v);
253         self.finish_if_not_nested()
254     }
serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error>255     fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
256         self.builder.push(v);
257         self.finish_if_not_nested()
258     }
serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>259     fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
260         self.builder.push(v);
261         self.finish_if_not_nested()
262     }
serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error>263     fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
264         self.builder.push(v);
265         self.finish_if_not_nested()
266     }
serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error>267     fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
268         self.builder.push(v);
269         self.finish_if_not_nested()
270     }
serialize_char(self, v: char) -> Result<Self::Ok, Self::Error>271     fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
272         self.builder.push(v as u8);
273         self.finish_if_not_nested()
274     }
serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error>275     fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
276         self.builder.push(v);
277         self.finish_if_not_nested()
278     }
serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error>279     fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
280         self.builder.push(crate::Blob(v));
281         self.finish_if_not_nested()
282     }
serialize_none(self) -> Result<Self::Ok, Self::Error>283     fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
284         self.builder.push(());
285         self.finish_if_not_nested()
286     }
serialize_some<T: ?Sized>(self, t: &T) -> Result<Self::Ok, Self::Error> where T: Serialize,287     fn serialize_some<T: ?Sized>(self, t: &T) -> Result<Self::Ok, Self::Error>
288     where
289         T: Serialize,
290     {
291         t.serialize(self)
292     }
serialize_unit(self) -> Result<Self::Ok, Self::Error>293     fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
294         self.builder.push(());
295         self.finish_if_not_nested()
296     }
serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok, Self::Error>297     fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok, Self::Error> {
298         self.builder.push(());
299         self.finish_if_not_nested()
300     }
serialize_unit_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, ) -> Result<Self::Ok, Self::Error>301     fn serialize_unit_variant(
302         self,
303         _name: &'static str,
304         _variant_index: u32,
305         variant: &'static str,
306     ) -> Result<Self::Ok, Self::Error> {
307         self.builder.push(variant);
308         self.finish_if_not_nested()
309     }
serialize_newtype_struct<T: ?Sized>( self, _name: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: Serialize,310     fn serialize_newtype_struct<T: ?Sized>(
311         self,
312         _name: &'static str,
313         value: &T,
314     ) -> Result<Self::Ok, Self::Error>
315     where
316         T: Serialize,
317     {
318         value.serialize(self)
319     }
serialize_newtype_variant<T: ?Sized>( self, _name: &'static str, _variant_index: u32, variant: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: Serialize,320     fn serialize_newtype_variant<T: ?Sized>(
321         self,
322         _name: &'static str,
323         _variant_index: u32,
324         variant: &'static str,
325         value: &T,
326     ) -> Result<Self::Ok, Self::Error>
327     where
328         T: Serialize,
329     {
330         self.start_map();
331         self.builder.push_key(variant);
332         value.serialize(&mut *self)?;
333         self.end_map()
334     }
serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error>335     fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
336         self.start_vector();
337         Ok(self)
338     }
serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Self::Error>339     fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Self::Error> {
340         self.start_vector();
341         Ok(self)
342     }
serialize_tuple_struct( self, _name: &'static str, _len: usize, ) -> Result<Self::SerializeTupleStruct, Self::Error>343     fn serialize_tuple_struct(
344         self,
345         _name: &'static str,
346         _len: usize,
347     ) -> Result<Self::SerializeTupleStruct, Self::Error> {
348         self.start_map();
349         Ok(self)
350     }
serialize_tuple_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, _len: usize, ) -> Result<Self::SerializeTupleVariant, Self::Error>351     fn serialize_tuple_variant(
352         self,
353         _name: &'static str,
354         _variant_index: u32,
355         variant: &'static str,
356         _len: usize,
357     ) -> Result<Self::SerializeTupleVariant, Self::Error> {
358         self.start_map();
359         self.builder.push_key(variant);
360         self.start_vector();
361         Ok(self)
362     }
serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Self::Error>363     fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
364         self.start_map();
365         Ok(self)
366     }
serialize_struct( self, _name: &'static str, _len: usize, ) -> Result<Self::SerializeStruct, Self::Error>367     fn serialize_struct(
368         self,
369         _name: &'static str,
370         _len: usize,
371     ) -> Result<Self::SerializeStruct, Self::Error> {
372         self.start_map();
373         Ok(self)
374     }
serialize_struct_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, _len: usize, ) -> Result<Self::SerializeStructVariant, Self::Error>375     fn serialize_struct_variant(
376         self,
377         _name: &'static str,
378         _variant_index: u32,
379         variant: &'static str,
380         _len: usize,
381     ) -> Result<Self::SerializeStructVariant, Self::Error> {
382         self.start_map();
383         self.builder.push_key(variant);
384         self.start_map();
385         Ok(self)
386     }
387 }
388 
key_must_be_a_string<T>() -> Result<T, Error>389 fn key_must_be_a_string<T>() -> Result<T, Error> {
390     Err(Error::KeyMustBeString)
391 }
392 struct MapKeySerializer<'a>(&'a mut FlexbufferSerializer);
393 impl<'a> Serializer for MapKeySerializer<'a> {
394     type Ok = ();
395     type Error = Error;
396     #[inline]
serialize_str(self, value: &str) -> Result<(), Error>397     fn serialize_str(self, value: &str) -> Result<(), Error> {
398         self.0.builder.push_key(value);
399         Ok(())
400     }
401     #[inline]
serialize_unit_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, ) -> Result<(), Error>402     fn serialize_unit_variant(
403         self,
404         _name: &'static str,
405         _variant_index: u32,
406         variant: &'static str,
407     ) -> Result<(), Error> {
408         self.0.builder.push_key(variant);
409         Ok(())
410     }
411     #[inline]
serialize_newtype_struct<T: ?Sized>( self, _name: &'static str, value: &T, ) -> Result<(), Error> where T: Serialize,412     fn serialize_newtype_struct<T: ?Sized>(
413         self,
414         _name: &'static str,
415         value: &T,
416     ) -> Result<(), Error>
417     where
418         T: Serialize,
419     {
420         value.serialize(self)
421     }
422     type SerializeSeq = Impossible<(), Error>;
423     type SerializeTuple = Impossible<(), Error>;
424     type SerializeTupleStruct = Impossible<(), Error>;
425     type SerializeTupleVariant = Impossible<(), Error>;
426     type SerializeMap = Impossible<(), Error>;
427     type SerializeStruct = Impossible<(), Error>;
428     type SerializeStructVariant = Impossible<(), Error>;
429 
serialize_bool(self, _value: bool) -> Result<(), Error>430     fn serialize_bool(self, _value: bool) -> Result<(), Error> {
431         key_must_be_a_string()
432     }
serialize_i8(self, _value: i8) -> Result<(), Error>433     fn serialize_i8(self, _value: i8) -> Result<(), Error> {
434         key_must_be_a_string()
435     }
serialize_i16(self, _value: i16) -> Result<(), Error>436     fn serialize_i16(self, _value: i16) -> Result<(), Error> {
437         key_must_be_a_string()
438     }
serialize_i32(self, _value: i32) -> Result<(), Error>439     fn serialize_i32(self, _value: i32) -> Result<(), Error> {
440         key_must_be_a_string()
441     }
serialize_i64(self, _value: i64) -> Result<(), Error>442     fn serialize_i64(self, _value: i64) -> Result<(), Error> {
443         key_must_be_a_string()
444     }
serialize_u8(self, _value: u8) -> Result<(), Error>445     fn serialize_u8(self, _value: u8) -> Result<(), Error> {
446         key_must_be_a_string()
447     }
serialize_u16(self, _value: u16) -> Result<(), Error>448     fn serialize_u16(self, _value: u16) -> Result<(), Error> {
449         key_must_be_a_string()
450     }
serialize_u32(self, _value: u32) -> Result<(), Error>451     fn serialize_u32(self, _value: u32) -> Result<(), Error> {
452         key_must_be_a_string()
453     }
serialize_u64(self, _value: u64) -> Result<(), Error>454     fn serialize_u64(self, _value: u64) -> Result<(), Error> {
455         key_must_be_a_string()
456     }
serialize_f32(self, _value: f32) -> Result<(), Error>457     fn serialize_f32(self, _value: f32) -> Result<(), Error> {
458         key_must_be_a_string()
459     }
serialize_f64(self, _value: f64) -> Result<(), Error>460     fn serialize_f64(self, _value: f64) -> Result<(), Error> {
461         key_must_be_a_string()
462     }
serialize_char(self, _value: char) -> Result<(), Error>463     fn serialize_char(self, _value: char) -> Result<(), Error> {
464         key_must_be_a_string()
465     }
serialize_bytes(self, _value: &[u8]) -> Result<(), Error>466     fn serialize_bytes(self, _value: &[u8]) -> Result<(), Error> {
467         key_must_be_a_string()
468     }
serialize_unit(self) -> Result<(), Error>469     fn serialize_unit(self) -> Result<(), Error> {
470         key_must_be_a_string()
471     }
serialize_unit_struct(self, _name: &'static str) -> Result<(), Error>472     fn serialize_unit_struct(self, _name: &'static str) -> Result<(), Error> {
473         key_must_be_a_string()
474     }
serialize_newtype_variant<T: ?Sized>( self, _name: &'static str, _variant_index: u32, _variant: &'static str, _value: &T, ) -> Result<(), Error> where T: Serialize,475     fn serialize_newtype_variant<T: ?Sized>(
476         self,
477         _name: &'static str,
478         _variant_index: u32,
479         _variant: &'static str,
480         _value: &T,
481     ) -> Result<(), Error>
482     where
483         T: Serialize,
484     {
485         key_must_be_a_string()
486     }
serialize_none(self) -> Result<(), Error>487     fn serialize_none(self) -> Result<(), Error> {
488         key_must_be_a_string()
489     }
serialize_some<T: ?Sized>(self, _value: &T) -> Result<(), Error> where T: Serialize,490     fn serialize_some<T: ?Sized>(self, _value: &T) -> Result<(), Error>
491     where
492         T: Serialize,
493     {
494         key_must_be_a_string()
495     }
serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Error>496     fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, Error> {
497         key_must_be_a_string()
498     }
serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Error>499     fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Error> {
500         key_must_be_a_string()
501     }
serialize_tuple_struct( self, _name: &'static str, _len: usize, ) -> Result<Self::SerializeTupleStruct, Error>502     fn serialize_tuple_struct(
503         self,
504         _name: &'static str,
505         _len: usize,
506     ) -> Result<Self::SerializeTupleStruct, Error> {
507         key_must_be_a_string()
508     }
serialize_tuple_variant( self, _name: &'static str, _variant_index: u32, _variant: &'static str, _len: usize, ) -> Result<Self::SerializeTupleVariant, Error>509     fn serialize_tuple_variant(
510         self,
511         _name: &'static str,
512         _variant_index: u32,
513         _variant: &'static str,
514         _len: usize,
515     ) -> Result<Self::SerializeTupleVariant, Error> {
516         key_must_be_a_string()
517     }
serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Error>518     fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Error> {
519         key_must_be_a_string()
520     }
serialize_struct( self, _name: &'static str, _len: usize, ) -> Result<Self::SerializeStruct, Error>521     fn serialize_struct(
522         self,
523         _name: &'static str,
524         _len: usize,
525     ) -> Result<Self::SerializeStruct, Error> {
526         key_must_be_a_string()
527     }
serialize_struct_variant( self, _name: &'static str, _variant_index: u32, _variant: &'static str, _len: usize, ) -> Result<Self::SerializeStructVariant, Error>528     fn serialize_struct_variant(
529         self,
530         _name: &'static str,
531         _variant_index: u32,
532         _variant: &'static str,
533         _len: usize,
534     ) -> Result<Self::SerializeStructVariant, Error> {
535         key_must_be_a_string()
536     }
537 }
538