1use super::write_document;
2use super::{Error, Serializer};
3use crate::fmt::DocumentFormatter;
4
5type InnerSerializeDocumentTable =
6 <toml_edit::ser::ValueSerializer as serde::Serializer>::SerializeMap;
7
8#[doc(hidden)]
9pub struct SerializeDocumentTable<'d> {
10 inner: InnerSerializeDocumentTable,
11 dst: &'d mut String,
12 settings: DocumentFormatter,
13}
14
15impl<'d> SerializeDocumentTable<'d> {
16 pub(crate) fn new(ser: Serializer<'d>, inner: InnerSerializeDocumentTable) -> Self {
17 Self {
18 inner,
19 dst: ser.dst,
20 settings: ser.settings,
21 }
22 }
23}
24
25impl serde::ser::SerializeMap for SerializeDocumentTable<'_> {
26 type Ok = ();
27 type Error = Error;
28
29 fn serialize_key<T>(&mut self, input: &T) -> Result<(), Self::Error>
30 where
31 T: serde::ser::Serialize + ?Sized,
32 {
33 self.inner.serialize_key(input).map_err(Error::wrap)
34 }
35
36 fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
37 where
38 T: serde::ser::Serialize + ?Sized,
39 {
40 self.inner.serialize_value(value).map_err(Error::wrap)
41 }
42
43 fn end(self) -> Result<Self::Ok, Self::Error> {
44 write_document(self.dst, self.settings, self.inner.end())
45 }
46}
47
48impl serde::ser::SerializeStruct for SerializeDocumentTable<'_> {
49 type Ok = ();
50 type Error = Error;
51
52 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
53 where
54 T: serde::ser::Serialize + ?Sized,
55 {
56 self.inner.serialize_field(key, value).map_err(Error::wrap)
57 }
58
59 fn end(self) -> Result<Self::Ok, Self::Error> {
60 write_document(self.dst, self.settings, self.inner.end())
61 }
62}
63
64impl serde::ser::SerializeStructVariant for SerializeDocumentTable<'_> {
65 type Ok = ();
66 type Error = Error;
67
68 #[inline]
69 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
70 where
71 T: serde::ser::Serialize + ?Sized,
72 {
73 serde::ser::SerializeStruct::serialize_field(self, key, value)
74 }
75
76 #[inline]
77 fn end(self) -> Result<Self::Ok, Self::Error> {
78 serde::ser::SerializeStruct::end(self)
79 }
80}
81
82type InnerSerializeDocumentStructVariant =
83 <toml_edit::ser::ValueSerializer as serde::Serializer>::SerializeStructVariant;
84
85#[doc(hidden)]
86pub struct SerializeDocumentStructVariant<'d> {
87 inner: InnerSerializeDocumentStructVariant,
88 dst: &'d mut String,
89 settings: DocumentFormatter,
90}
91
92impl<'d> SerializeDocumentStructVariant<'d> {
93 pub(crate) fn new(ser: Serializer<'d>, inner: InnerSerializeDocumentStructVariant) -> Self {
94 Self {
95 inner,
96 dst: ser.dst,
97 settings: ser.settings,
98 }
99 }
100}
101
102impl serde::ser::SerializeStructVariant for SerializeDocumentStructVariant<'_> {
103 type Ok = ();
104 type Error = Error;
105
106 #[inline]
107 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
108 where
109 T: serde::ser::Serialize + ?Sized,
110 {
111 self.inner.serialize_field(key, value).map_err(Error::wrap)
112 }
113
114 #[inline]
115 fn end(self) -> Result<Self::Ok, Self::Error> {
116 write_document(self.dst, self.settings, self.inner.end())
117 }
118}