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::SerializeTupleVariant 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
73impl serde::ser::SerializeTupleStruct for SerializeDocumentArray<'_> {
74    type Ok = ();
75    type Error = Error;
76
77    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
78    where
79        T: serde::ser::Serialize + ?Sized,
80    {
81        self.inner.serialize_field(value).map_err(Error::wrap)
82    }
83
84    fn end(self) -> Result<Self::Ok, Self::Error> {
85        write_document(self.dst, self.settings, self.inner.end())
86    }
87}