1 use super::Error; 2 3 #[doc(hidden)] 4 pub struct SerializeValueArray { 5 values: Vec<crate::Item>, 6 } 7 8 impl SerializeValueArray { new() -> Self9 pub(crate) fn new() -> Self { 10 Self { values: Vec::new() } 11 } 12 with_capacity(len: usize) -> Self13 pub(crate) fn with_capacity(len: usize) -> Self { 14 Self { 15 values: Vec::with_capacity(len), 16 } 17 } 18 } 19 20 impl serde::ser::SerializeSeq for SerializeValueArray { 21 type Ok = crate::Value; 22 type Error = Error; 23 serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> where T: serde::ser::Serialize,24 fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> 25 where 26 T: serde::ser::Serialize, 27 { 28 let value = value.serialize(super::ValueSerializer {})?; 29 self.values.push(crate::Item::Value(value)); 30 Ok(()) 31 } 32 end(self) -> Result<Self::Ok, Self::Error>33 fn end(self) -> Result<Self::Ok, Self::Error> { 34 Ok(crate::Value::Array(crate::Array::with_vec(self.values))) 35 } 36 } 37 38 impl serde::ser::SerializeTuple for SerializeValueArray { 39 type Ok = crate::Value; 40 type Error = Error; 41 serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> where T: serde::ser::Serialize,42 fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> 43 where 44 T: serde::ser::Serialize, 45 { 46 serde::ser::SerializeSeq::serialize_element(self, value) 47 } 48 end(self) -> Result<Self::Ok, Self::Error>49 fn end(self) -> Result<Self::Ok, Self::Error> { 50 serde::ser::SerializeSeq::end(self) 51 } 52 } 53 54 impl serde::ser::SerializeTupleVariant for SerializeValueArray { 55 type Ok = crate::Value; 56 type Error = Error; 57 serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> where T: serde::ser::Serialize,58 fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> 59 where 60 T: serde::ser::Serialize, 61 { 62 serde::ser::SerializeSeq::serialize_element(self, value) 63 } 64 end(self) -> Result<Self::Ok, Self::Error>65 fn end(self) -> Result<Self::Ok, Self::Error> { 66 serde::ser::SerializeSeq::end(self) 67 } 68 } 69 70 impl serde::ser::SerializeTupleStruct for SerializeValueArray { 71 type Ok = crate::Value; 72 type Error = Error; 73 serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> where T: serde::ser::Serialize,74 fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Error> 75 where 76 T: serde::ser::Serialize, 77 { 78 serde::ser::SerializeSeq::serialize_element(self, value) 79 } 80 end(self) -> Result<Self::Ok, Self::Error>81 fn end(self) -> Result<Self::Ok, Self::Error> { 82 serde::ser::SerializeSeq::end(self) 83 } 84 } 85