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}