@@ -16,7 +16,7 @@ use std::hash::{Hash, Hasher};
16
16
17
17
use { Decodable , Encodable , Decoder , Encoder } ;
18
18
use std:: collections:: { DList , RingBuf , TreeMap , TreeSet , HashMap , HashSet ,
19
- TrieMap , TrieSet } ;
19
+ TrieMap , TrieSet , VecMap } ;
20
20
use std:: collections:: enum_set:: { EnumSet , CLike } ;
21
21
22
22
impl <
@@ -311,3 +311,37 @@ impl<E, D: Decoder<E>> Decodable<D, E> for TrieSet {
311
311
} )
312
312
}
313
313
}
314
+
315
+ impl <
316
+ E ,
317
+ S : Encoder < E > ,
318
+ V : Encodable < S , E >
319
+ > Encodable < S , E > for VecMap < V > {
320
+ fn encode ( & self , e : & mut S ) -> Result < ( ) , E > {
321
+ e. emit_map ( self . len ( ) , |e| {
322
+ for ( i, ( key, val) ) in self . iter ( ) . enumerate ( ) {
323
+ try!( e. emit_map_elt_key ( i, |e| key. encode ( e) ) ) ;
324
+ try!( e. emit_map_elt_val ( i, |e| val. encode ( e) ) ) ;
325
+ }
326
+ Ok ( ( ) )
327
+ } )
328
+ }
329
+ }
330
+
331
+ impl <
332
+ E ,
333
+ D : Decoder < E > ,
334
+ V : Decodable < D , E >
335
+ > Decodable < D , E > for VecMap < V > {
336
+ fn decode ( d : & mut D ) -> Result < VecMap < V > , E > {
337
+ d. read_map ( |d, len| {
338
+ let mut map = VecMap :: new ( ) ;
339
+ for i in range ( 0 u, len) {
340
+ let key = try!( d. read_map_elt_key ( i, |d| Decodable :: decode ( d) ) ) ;
341
+ let val = try!( d. read_map_elt_val ( i, |d| Decodable :: decode ( d) ) ) ;
342
+ map. insert ( key, val) ;
343
+ }
344
+ Ok ( map)
345
+ } )
346
+ }
347
+ }
0 commit comments