msgpack/ser/
compound.rs

1use std::io;
2
3use crate::packer::Packer;
4use crate::ser::error::SerError;
5use serde::ser::{self, Serialize};
6
7#[derive(Debug)]
8pub struct Compound<'a, W: 'a> {
9    se: &'a mut Packer<W>,
10}
11
12impl<W: io::Write> Packer<W> {
13    #[inline]
14    pub fn compound(&mut self) -> Compound<W> {
15        Compound { se: self }
16    }
17}
18
19impl<'a, W: io::Write + 'a> ser::SerializeMap for Compound<'a, W> {
20    type Ok = ();
21    type Error = SerError;
22
23    fn serialize_key<T: ?Sized + Serialize>(&mut self, key: &T) -> Result<Self::Ok, Self::Error> {
24        key.serialize(&mut *self.se)
25    }
26
27    fn serialize_value<T: ?Sized + Serialize>(
28        &mut self,
29        value: &T,
30    ) -> Result<Self::Ok, Self::Error> {
31        value.serialize(&mut *self.se)
32    }
33
34    fn end(self) -> Result<Self::Ok, Self::Error> {
35        Ok(())
36    }
37}
38
39impl<'a, W: io::Write + 'a> ser::SerializeSeq for Compound<'a, W> {
40    type Ok = ();
41    type Error = SerError;
42
43    fn serialize_element<T: ?Sized + Serialize>(
44        &mut self,
45        value: &T,
46    ) -> Result<Self::Ok, Self::Error> {
47        value.serialize(&mut *self.se)
48    }
49
50    fn end(self) -> Result<Self::Ok, Self::Error> {
51        Ok(())
52    }
53}
54
55impl<'a, W: io::Write + 'a> ser::SerializeTuple for Compound<'a, W> {
56    type Ok = ();
57    type Error = SerError;
58
59    fn serialize_element<T: ?Sized + Serialize>(
60        &mut self,
61        value: &T,
62    ) -> Result<Self::Ok, Self::Error> {
63        value.serialize(&mut *self.se)
64    }
65
66    fn end(self) -> Result<Self::Ok, Self::Error> {
67        Ok(())
68    }
69}
70
71impl<'a, W: io::Write + 'a> ser::SerializeTupleStruct for Compound<'a, W> {
72    type Ok = ();
73    type Error = SerError;
74
75    fn serialize_field<T: ?Sized + Serialize>(
76        &mut self,
77        value: &T,
78    ) -> Result<Self::Ok, Self::Error> {
79        value.serialize(&mut *self.se)
80    }
81
82    fn end(self) -> Result<Self::Ok, Self::Error> {
83        Ok(())
84    }
85}
86
87impl<'a, W: io::Write + 'a> ser::SerializeTupleVariant for Compound<'a, W> {
88    type Ok = ();
89    type Error = SerError;
90
91    fn serialize_field<T: ?Sized + Serialize>(
92        &mut self,
93        value: &T,
94    ) -> Result<Self::Ok, Self::Error> {
95        value.serialize(&mut *self.se)
96    }
97
98    fn end(self) -> Result<Self::Ok, Self::Error> {
99        Ok(())
100    }
101}
102
103impl<'a, W: io::Write + 'a> ser::SerializeStruct for Compound<'a, W> {
104    type Ok = ();
105    type Error = SerError;
106
107    fn serialize_field<T: ?Sized + Serialize>(
108        &mut self,
109        key: &'static str,
110        value: &T,
111    ) -> Result<Self::Ok, Self::Error> {
112        key.serialize(&mut *self.se)?;
113        value.serialize(&mut *self.se)
114    }
115
116    fn end(self) -> Result<Self::Ok, Self::Error> {
117        Ok(())
118    }
119}
120
121impl<'a, W: io::Write + 'a> ser::SerializeStructVariant for Compound<'a, W> {
122    type Ok = ();
123    type Error = SerError;
124
125    fn serialize_field<T: ?Sized + Serialize>(
126        &mut self,
127        key: &'static str,
128        value: &T,
129    ) -> Result<Self::Ok, Self::Error> {
130        key.serialize(&mut *self.se)?;
131        value.serialize(&mut *self.se)
132    }
133
134    fn end(self) -> Result<Self::Ok, Self::Error> {
135        Ok(())
136    }
137}