1 use super::Serializer; 2 use crate::error::{Error, Result}; 3 use serde::ser::Serialize; 4 use std::io::Write; 5 6 pub struct SeqSeralizer<'ser, W: 'ser + Write> { 7 ser: &'ser mut Serializer<W>, 8 } 9 10 impl<'ser, W: 'ser + Write> SeqSeralizer<'ser, W> { new(ser: &'ser mut Serializer<W>) -> Self11 pub fn new(ser: &'ser mut Serializer<W>) -> Self { 12 SeqSeralizer { ser } 13 } 14 } 15 16 impl<'ser, W: 'ser + Write> serde::ser::SerializeSeq for SeqSeralizer<'ser, W> { 17 type Ok = (); 18 type Error = Error; 19 serialize_element<T>(&mut self, value: &T) -> Result<()> where T: ?Sized + Serialize,20 fn serialize_element<T>(&mut self, value: &T) -> Result<()> 21 where 22 T: ?Sized + Serialize, 23 { 24 let must_close_tag = self.ser.build_start_tag()?; 25 value.serialize(&mut *self.ser)?; 26 if must_close_tag { 27 self.ser.end_tag()?; 28 self.ser.reopen_tag()?; 29 } 30 Ok(()) 31 } 32 end(self) -> Result<()>33 fn end(self) -> Result<()> { 34 self.ser.abandon_tag()?; 35 Ok(()) 36 } 37 } 38