@@ -3,7 +3,7 @@ use std::io::Write;
3
3
4
4
use serde:: ser:: { self , Impossible , Serialize } ;
5
5
6
- use self :: var:: { Map , Struct } ;
6
+ use self :: var:: { Map , Struct , Seq } ;
7
7
use error:: { Error , Result } ;
8
8
9
9
mod var;
@@ -109,7 +109,7 @@ where
109
109
type Ok = ( ) ;
110
110
type Error = Error ;
111
111
112
- type SerializeSeq = Impossible < Self :: Ok , Self :: Error > ;
112
+ type SerializeSeq = Seq < ' w , W > ;
113
113
type SerializeTuple = Impossible < Self :: Ok , Self :: Error > ;
114
114
type SerializeTupleStruct = Impossible < Self :: Ok , Self :: Error > ;
115
115
type SerializeTupleVariant = Impossible < Self :: Ok , Self :: Error > ;
@@ -205,9 +205,7 @@ where
205
205
variant_index : u32 ,
206
206
variant : & ' static str ,
207
207
) -> Result < Self :: Ok > {
208
- Err ( Error :: UnsupportedOperation {
209
- operation : "serialize_unit_variant" . to_string ( ) ,
210
- } )
208
+ self . serialize_none ( )
211
209
}
212
210
213
211
fn serialize_newtype_struct < T : ?Sized + Serialize > (
@@ -232,9 +230,7 @@ where
232
230
233
231
fn serialize_seq ( self , len : Option < usize > ) -> Result < Self :: SerializeSeq > {
234
232
// 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 ) )
238
234
}
239
235
240
236
fn serialize_tuple ( self , len : usize ) -> Result < Self :: SerializeTuple > {
@@ -285,6 +281,28 @@ where
285
281
operation : "Result" . to_string ( ) ,
286
282
} )
287
283
}
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
+ }
288
306
}
289
307
290
308
#[ cfg( test) ]
@@ -361,6 +379,19 @@ mod tests {
361
379
assert_eq ! ( got, should_be) ;
362
380
}
363
381
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
+
364
395
#[ test]
365
396
fn test_serialize_map_entries ( ) {
366
397
let should_be = "<name>Bob</name><age>5</age>" ;
0 commit comments