serde_firestore_value/ser/
firestore_array_value_serializer.rs1use 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}