toml/ser/ser_value/
map.rs

1use super::write_value;
2use super::{Error, ValueSerializer};
3
4type InnerSerializeValueTable =
5    <toml_edit::ser::ValueSerializer as serde::Serializer>::SerializeMap;
6
7#[doc(hidden)]
8pub struct SerializeValueTable<'d> {
9    inner: InnerSerializeValueTable,
10    dst: &'d mut String,
11}
12
13impl<'d> SerializeValueTable<'d> {
14    pub(crate) fn new(ser: ValueSerializer<'d>, inner: InnerSerializeValueTable) -> Self {
15        Self {
16            inner,
17            dst: ser.dst,
18        }
19    }
20}
21
22impl serde::ser::SerializeMap for SerializeValueTable<'_> {
23    type Ok = ();
24    type Error = Error;
25
26    fn serialize_key<T>(&mut self, input: &T) -> Result<(), Self::Error>
27    where
28        T: serde::ser::Serialize + ?Sized,
29    {
30        self.inner.serialize_key(input).map_err(Error::wrap)
31    }
32
33    fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
34    where
35        T: serde::ser::Serialize + ?Sized,
36    {
37        self.inner.serialize_value(value).map_err(Error::wrap)
38    }
39
40    fn end(self) -> Result<Self::Ok, Self::Error> {
41        write_value(self.dst, self.inner.end())
42    }
43}
44
45impl serde::ser::SerializeStruct for SerializeValueTable<'_> {
46    type Ok = ();
47    type Error = Error;
48
49    fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
50    where
51        T: serde::ser::Serialize + ?Sized,
52    {
53        self.inner.serialize_field(key, value).map_err(Error::wrap)
54    }
55
56    fn end(self) -> Result<Self::Ok, Self::Error> {
57        write_value(self.dst, self.inner.end())
58    }
59}