Skip to main content

serde_firestore_value/ser/
firestore_array_value_serializer.rs

1use crate::google::firestore::v1::Value;
2use crate::{ser::Error, value_ext::ValueExt};
3
4use super::serializer::Serializer;
5
6#[doc(hidden)]
7pub struct FirestoreArrayValueSerializer {
8    values: Vec<Value>,
9}
10
11impl FirestoreArrayValueSerializer {
12    pub(crate) fn new(len: Option<usize>) -> Self {
13        Self {
14            values: Vec::with_capacity(len.unwrap_or(0)),
15        }
16    }
17}
18
19impl serde::ser::SerializeSeq for FirestoreArrayValueSerializer {
20    type Ok = Value;
21
22    type Error = Error;
23
24    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
25    where
26        T: ?Sized + serde::Serialize,
27    {
28        self.values.push(value.serialize(Serializer::new())?);
29        Ok(())
30    }
31
32    fn end(self) -> Result<Self::Ok, Self::Error> {
33        Ok(Value::from_values(self.values))
34    }
35}
36
37impl serde::ser::SerializeTuple for FirestoreArrayValueSerializer {
38    type Ok = Value;
39
40    type Error = Error;
41
42    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
43    where
44        T: ?Sized + serde::Serialize,
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::SerializeTupleStruct for FirestoreArrayValueSerializer {
55    type Ok = Value;
56
57    type Error = Error;
58
59    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
60    where
61        T: ?Sized + serde::Serialize,
62    {
63        serde::ser::SerializeSeq::serialize_element(self, value)
64    }
65
66    fn end(self) -> Result<Self::Ok, Self::Error> {
67        serde::ser::SerializeSeq::end(self)
68    }
69}
70impl serde::ser::SerializeTupleVariant for FirestoreArrayValueSerializer {
71    type Ok = Value;
72
73    type Error = Error;
74
75    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
76    where
77        T: ?Sized + serde::Serialize,
78    {
79        serde::ser::SerializeSeq::serialize_element(self, value)
80    }
81
82    fn end(self) -> Result<Self::Ok, Self::Error> {
83        serde::ser::SerializeSeq::end(self)
84    }
85}