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}