toml/ser/document/
array.rs1use core::fmt::Write as _;
2
3use toml_writer::TomlWrite as _;
4
5use super::style::Style;
6use super::value::ValueSerializer;
7use super::Buffer;
8use super::Error;
9use super::Table;
10
11#[doc(hidden)]
12pub struct SerializeDocumentTupleVariant<'d> {
13 buf: &'d mut Buffer,
14 table: Table,
15 seen_value: bool,
16 style: Style,
17}
18
19impl<'d> SerializeDocumentTupleVariant<'d> {
20 pub(crate) fn tuple(
21 buf: &'d mut Buffer,
22 mut table: Table,
23 variant: &'static str,
24 _len: usize,
25 style: Style,
26 ) -> Result<Self, Error> {
27 let dst = table.body_mut();
28 dst.key(variant)?;
29 dst.space()?;
30 dst.keyval_sep()?;
31 dst.space()?;
32 dst.open_array()?;
33 Ok(Self {
34 buf,
35 table,
36 seen_value: false,
37 style,
38 })
39 }
40}
41
42impl<'d> serde::ser::SerializeTupleVariant for SerializeDocumentTupleVariant<'d> {
43 type Ok = &'d mut Buffer;
44 type Error = Error;
45
46 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
47 where
48 T: serde::ser::Serialize + ?Sized,
49 {
50 let dst = self.table.body_mut();
51
52 if self.style.multiline_array {
53 dst.newline()?;
54 write!(dst, " ")?;
55 } else {
56 if self.seen_value {
57 dst.val_sep()?;
58 dst.space()?;
59 }
60 }
61 self.seen_value = true;
62 value.serialize(ValueSerializer::with_style(dst, self.style))?;
63 if self.style.multiline_array {
64 dst.val_sep()?;
65 }
66 Ok(())
67 }
68
69 fn end(mut self) -> Result<Self::Ok, Self::Error> {
70 let dst = self.table.body_mut();
71 if self.style.multiline_array && self.seen_value {
72 dst.newline()?;
73 }
74 dst.close_array()?;
75 dst.newline()?;
76 self.buf.push(self.table);
77 Ok(self.buf)
78 }
79}