@@ -538,7 +538,6 @@ impl<'a> ::Encoder for Encoder<'a> {
538
538
fn emit_enum < F > ( & mut self , _name : & str , f : F ) -> EncodeResult where
539
539
F : FnOnce ( & mut Encoder < ' a > ) -> EncodeResult ,
540
540
{
541
- if self . is_emitting_map_key { return Err ( EncoderError :: BadHashmapKey ) ; }
542
541
f ( self )
543
542
}
544
543
@@ -552,10 +551,10 @@ impl<'a> ::Encoder for Encoder<'a> {
552
551
// enums are encoded as strings or objects
553
552
// Bunny => "Bunny"
554
553
// Kangaroo(34,"William") => {"variant": "Kangaroo", "fields": [34,"William"]}
555
- if self . is_emitting_map_key { return Err ( EncoderError :: BadHashmapKey ) ; }
556
554
if cnt == 0 {
557
555
escape_str ( self . writer , name)
558
556
} else {
557
+ if self . is_emitting_map_key { return Err ( EncoderError :: BadHashmapKey ) ; }
559
558
try!( write ! ( self . writer, "{{\" variant\" :" ) ) ;
560
559
try!( escape_str ( self . writer , name) ) ;
561
560
try!( write ! ( self . writer, ",\" fields\" :[" ) ) ;
@@ -787,7 +786,6 @@ impl<'a> ::Encoder for PrettyEncoder<'a> {
787
786
fn emit_enum < F > ( & mut self , _name : & str , f : F ) -> EncodeResult where
788
787
F : FnOnce ( & mut PrettyEncoder < ' a > ) -> EncodeResult ,
789
788
{
790
- if self . is_emitting_map_key { return Err ( EncoderError :: BadHashmapKey ) ; }
791
789
f ( self )
792
790
}
793
791
@@ -799,10 +797,10 @@ impl<'a> ::Encoder for PrettyEncoder<'a> {
799
797
-> EncodeResult where
800
798
F : FnOnce ( & mut PrettyEncoder < ' a > ) -> EncodeResult ,
801
799
{
802
- if self . is_emitting_map_key { return Err ( EncoderError :: BadHashmapKey ) ; }
803
800
if cnt == 0 {
804
801
escape_str ( self . writer , name)
805
802
} else {
803
+ if self . is_emitting_map_key { return Err ( EncoderError :: BadHashmapKey ) ; }
806
804
try!( write ! ( self . writer, "{{\n " ) ) ;
807
805
self . curr_indent += self . indent ;
808
806
try!( spaces ( self . writer , self . curr_indent ) ) ;
@@ -3556,20 +3554,18 @@ mod tests {
3556
3554
fn test_hashmap_with_enum_key ( ) {
3557
3555
use std:: collections:: HashMap ;
3558
3556
use json;
3559
- #[ derive( RustcEncodable , Eq , Hash , PartialEq ) ]
3557
+ #[ derive( RustcEncodable , Eq , Hash , PartialEq , RustcDecodable , Show ) ]
3560
3558
enum Enum {
3561
3559
Foo ,
3562
3560
#[ allow( dead_code) ]
3563
3561
Bar ,
3564
3562
}
3565
3563
let mut map = HashMap :: new ( ) ;
3566
3564
map. insert ( Enum :: Foo , 0 ) ;
3567
- let result = json:: encode ( & map) ;
3568
- match result. unwrap_err ( ) {
3569
- EncoderError :: BadHashmapKey => ( ) ,
3570
- _ => panic ! ( "expected bad hash map key" )
3571
- }
3572
- //assert_eq!(&enc[], r#"{"Foo": 0}"#);
3565
+ let result = json:: encode ( & map) . unwrap ( ) ;
3566
+ assert_eq ! ( & result[ ] , r#"{"Foo":0}"# ) ;
3567
+ let decoded: HashMap < Enum , _ > = json:: decode ( result. as_slice ( ) ) . unwrap ( ) ;
3568
+ assert_eq ! ( map, decoded) ;
3573
3569
}
3574
3570
3575
3571
#[ test]
0 commit comments