@@ -3,7 +3,7 @@ use std::io::Write;
33
44use serde:: ser:: { self , Impossible , Serialize } ;
55
6- use self :: var:: { Map , Struct } ;
6+ use self :: var:: { Map , Struct , Seq } ;
77use error:: { Error , Result } ;
88
99mod var;
@@ -109,7 +109,7 @@ where
109109 type Ok = ( ) ;
110110 type Error = Error ;
111111
112- type SerializeSeq = Impossible < Self :: Ok , Self :: Error > ;
112+ type SerializeSeq = Seq < ' w , W > ;
113113 type SerializeTuple = Impossible < Self :: Ok , Self :: Error > ;
114114 type SerializeTupleStruct = Impossible < Self :: Ok , Self :: Error > ;
115115 type SerializeTupleVariant = Impossible < Self :: Ok , Self :: Error > ;
@@ -205,9 +205,7 @@ where
205205 variant_index : u32 ,
206206 variant : & ' static str ,
207207 ) -> Result < Self :: Ok > {
208- Err ( Error :: UnsupportedOperation {
209- operation : "serialize_unit_variant" . to_string ( ) ,
210- } )
208+ self . serialize_none ( )
211209 }
212210
213211 fn serialize_newtype_struct < T : ?Sized + Serialize > (
@@ -232,9 +230,7 @@ where
232230
233231 fn serialize_seq ( self , len : Option < usize > ) -> Result < Self :: SerializeSeq > {
234232 // TODO: Figure out how to constrain the things written to only be composites
235- Err ( Error :: UnsupportedOperation {
236- operation : "serialize_seq" . to_string ( ) ,
237- } )
233+ Ok ( Self :: SerializeSeq :: new ( self ) )
238234 }
239235
240236 fn serialize_tuple ( self , len : usize ) -> Result < Self :: SerializeTuple > {
@@ -285,6 +281,28 @@ where
285281 operation : "Result" . to_string ( ) ,
286282 } )
287283 }
284+
285+ fn collect_seq < I > ( self , iter : I ) -> Result < Self :: Ok > where
286+ I : IntoIterator ,
287+ <I as IntoIterator >:: Item : Serialize , {
288+ unimplemented ! ( )
289+ }
290+
291+ fn collect_map < K , V , I > ( self , iter : I ) -> Result < Self :: Ok > where
292+ K : Serialize ,
293+ V : Serialize ,
294+ I : IntoIterator < Item =( K , V ) > , {
295+ unimplemented ! ( )
296+ }
297+
298+ fn collect_str < T : ?Sized > ( self , value : & T ) -> Result < Self :: Ok > where
299+ T : Display , {
300+ unimplemented ! ( )
301+ }
302+
303+ fn is_human_readable ( & self ) -> bool {
304+ false
305+ }
288306}
289307
290308#[ cfg( test) ]
@@ -361,6 +379,19 @@ mod tests {
361379 assert_eq ! ( got, should_be) ;
362380 }
363381
382+ #[ test]
383+ fn test_serialize_simple_map ( ) {
384+ let mut hashmap = std:: collections:: HashMap :: new ( ) ;
385+ let mut buffer = Vec :: new ( ) ;
386+ hashmap. insert ( "key1" , "val1" ) ;
387+ {
388+ let mut ser = Serializer :: new ( & mut buffer) ;
389+ hashmap. serialize ( & mut ser) . expect ( "unable to serialize a hashmap instance" ) ;
390+ }
391+ let got = String :: from_utf8 ( buffer) . unwrap ( ) ;
392+ assert_eq ! ( "<key1>val1</key1>" , got)
393+ }
394+
364395 #[ test]
365396 fn test_serialize_map_entries ( ) {
366397 let should_be = "<name>Bob</name><age>5</age>" ;
0 commit comments