toml/ser/
map.rs

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}