1use serde::ser;
2
3use crate::ser::{Error, Result, Serializer};
4
5pub struct SerializeStruct<'a> {
6 ser: &'a mut Serializer,
7 first: bool,
8}
9
10impl<'a> SerializeStruct<'a> {
11 pub(crate) fn new(ser: &'a mut Serializer) -> Self {
12 SerializeStruct { ser, first: true }
13 }
14}
15
16impl<'a> ser::SerializeStruct for SerializeStruct<'a> {
17 type Ok = ();
18 type Error = Error;
19
20 fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<()>
21 where
22 T: ser::Serialize,
23 {
24 if !self.first {
26 self.ser.push(b',')?;
27 }
28 self.first = false;
29
30 self.ser.push(b'"')?;
31 self.ser.extend_from_slice(key.as_bytes())?;
32 self.ser.extend_from_slice(b"\":")?;
33
34 value.serialize(&mut *self.ser)?;
35
36 Ok(())
37 }
38
39 fn end(self) -> Result<Self::Ok> {
40 self.ser.push(b'}')?;
41 Ok(())
42 }
43}
44
45pub struct SerializeStructVariant<'a> {
46 ser: &'a mut Serializer,
47 first: bool,
48}
49
50impl<'a, 'b: 'a> SerializeStructVariant<'a> {
51 pub(crate) fn new(ser: &'a mut Serializer) -> Self {
52 SerializeStructVariant { ser, first: true }
53 }
54}
55
56impl<'a> ser::SerializeStructVariant for SerializeStructVariant<'a> {
57 type Ok = ();
58 type Error = Error;
59
60 fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<()>
61 where
62 T: ser::Serialize,
63 {
64 if !self.first {
66 self.ser.push(b',')?;
67 }
68 self.first = false;
69
70 self.ser.push(b'"')?;
71 self.ser.extend_from_slice(key.as_bytes())?;
72 self.ser.extend_from_slice(b"\":")?;
73
74 value.serialize(&mut *self.ser)?;
75
76 Ok(())
77 }
78
79 fn end(self) -> Result<Self::Ok> {
80 self.ser.extend_from_slice(b"}}")?;
81 Ok(())
82 }
83}