toml/ser/
array.rs

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