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}