toml_edit/ser/
array.rs
1use super::Error;
2
3#[doc(hidden)]
4pub struct SerializeValueArray {
5 values: Vec<crate::Item>,
6}
7
8impl SerializeValueArray {
9 pub(crate) fn new() -> Self {
10 Self { values: Vec::new() }
11 }
12
13 pub(crate) fn with_capacity(len: usize) -> Self {
14 Self {
15 values: Vec::with_capacity(len),
16 }
17 }
18}
19
20impl serde::ser::SerializeSeq for SerializeValueArray {
21 type Ok = crate::Value;
22 type Error = Error;
23
24 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Error>
25 where
26 T: serde::ser::Serialize + ?Sized,
27 {
28 let value = value.serialize(super::ValueSerializer {})?;
29 self.values.push(crate::Item::Value(value));
30 Ok(())
31 }
32
33 fn end(self) -> Result<Self::Ok, Self::Error> {
34 Ok(crate::Value::Array(crate::Array::with_vec(self.values)))
35 }
36}
37
38impl serde::ser::SerializeTuple for SerializeValueArray {
39 type Ok = crate::Value;
40 type Error = Error;
41
42 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Error>
43 where
44 T: serde::ser::Serialize + ?Sized,
45 {
46 serde::ser::SerializeSeq::serialize_element(self, value)
47 }
48
49 fn end(self) -> Result<Self::Ok, Self::Error> {
50 serde::ser::SerializeSeq::end(self)
51 }
52}
53
54impl serde::ser::SerializeTupleVariant for SerializeValueArray {
55 type Ok = crate::Value;
56 type Error = Error;
57
58 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
59 where
60 T: serde::ser::Serialize + ?Sized,
61 {
62 serde::ser::SerializeSeq::serialize_element(self, value)
63 }
64
65 fn end(self) -> Result<Self::Ok, Self::Error> {
66 serde::ser::SerializeSeq::end(self)
67 }
68}
69
70impl serde::ser::SerializeTupleStruct for SerializeValueArray {
71 type Ok = crate::Value;
72 type Error = Error;
73
74 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
75 where
76 T: serde::ser::Serialize + ?Sized,
77 {
78 serde::ser::SerializeSeq::serialize_element(self, value)
79 }
80
81 fn end(self) -> Result<Self::Ok, Self::Error> {
82 serde::ser::SerializeSeq::end(self)
83 }
84}
85
86pub struct SerializeTupleVariant {
87 variant: &'static str,
88 inner: SerializeValueArray,
89}
90
91impl SerializeTupleVariant {
92 pub(crate) fn tuple(variant: &'static str, len: usize) -> Self {
93 Self {
94 variant,
95 inner: SerializeValueArray::with_capacity(len),
96 }
97 }
98}
99
100impl serde::ser::SerializeTupleVariant for SerializeTupleVariant {
101 type Ok = crate::Value;
102 type Error = Error;
103
104 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
105 where
106 T: serde::ser::Serialize + ?Sized,
107 {
108 serde::ser::SerializeSeq::serialize_element(&mut self.inner, value)
109 }
110
111 fn end(self) -> Result<Self::Ok, Self::Error> {
112 let inner = serde::ser::SerializeSeq::end(self.inner)?;
113 let mut items = crate::table::KeyValuePairs::new();
114 let value = crate::Item::Value(inner);
115 items.insert(crate::Key::new(self.variant), value);
116 Ok(crate::Value::InlineTable(crate::InlineTable::with_pairs(
117 items,
118 )))
119 }
120}