@@ -2227,6 +2227,10 @@ impl<A:ToJson,B:ToJson,C:ToJson> ToJson for (A, B, C) {
22272227 }
22282228}
22292229
2230+ impl < ' a , A : ToJson > ToJson for & ' a [ A ] {
2231+ fn to_json ( & self ) -> Json { List ( self . iter ( ) . map ( |elt| elt. to_json ( ) ) . collect ( ) ) }
2232+ }
2233+
22302234impl < A : ToJson > ToJson for ~[ A ] {
22312235 fn to_json ( & self ) -> Json { List ( self . iter ( ) . map ( |elt| elt. to_json ( ) ) . collect ( ) ) }
22322236}
@@ -3334,6 +3338,56 @@ mod tests {
33343338 assert ! ( stack. get( 1 ) == Key ( "foo" ) ) ;
33353339 }
33363340
3341+ #[ test]
3342+ fn test_to_json ( ) {
3343+ use collections:: { HashMap , TreeMap } ;
3344+ use super :: ToJson ;
3345+
3346+ let list2 = List ( vec ! ( Number ( 1.0_f64 ) , Number ( 2.0_f64 ) ) ) ;
3347+ let list3 = List ( vec ! ( Number ( 1.0f64 ) , Number ( 2.0f64 ) , Number ( 3.0f64 ) ) ) ;
3348+ let object = {
3349+ let mut tree_map = TreeMap :: new ( ) ;
3350+ tree_map. insert ( "a" . to_string ( ) , Number ( 1.0_f64 ) ) ;
3351+ tree_map. insert ( "b" . to_string ( ) , Number ( 2.0_f64 ) ) ;
3352+ Object ( box tree_map)
3353+ } ;
3354+
3355+ assert_eq ! ( list2. to_json( ) , list2) ;
3356+ assert_eq ! ( object. to_json( ) , object) ;
3357+ assert_eq ! ( 3_ i. to_json( ) , Number ( 3.0_f64 ) ) ;
3358+ assert_eq ! ( 4_i8 . to_json( ) , Number ( 4.0_f64 ) ) ;
3359+ assert_eq ! ( 5_i16 . to_json( ) , Number ( 5.0_f64 ) ) ;
3360+ assert_eq ! ( 6_i32 . to_json( ) , Number ( 6.0_f64 ) ) ;
3361+ assert_eq ! ( 7_i64 . to_json( ) , Number ( 7.0_f64 ) ) ;
3362+ assert_eq ! ( 8_ u. to_json( ) , Number ( 8.0_f64 ) ) ;
3363+ assert_eq ! ( 9_u8 . to_json( ) , Number ( 9.0_f64 ) ) ;
3364+ assert_eq ! ( 10_u16 . to_json( ) , Number ( 10.0_f64 ) ) ;
3365+ assert_eq ! ( 11_u32 . to_json( ) , Number ( 11.0_f64 ) ) ;
3366+ assert_eq ! ( 12_u64 . to_json( ) , Number ( 12.0_f64 ) ) ;
3367+ assert_eq ! ( 13.0_f32 . to_json( ) , Number ( 13.0_f64 ) ) ;
3368+ assert_eq ! ( 14.0_f64 . to_json( ) , Number ( 14.0_f64 ) ) ;
3369+ assert_eq ! ( ( ) . to_json( ) , Null ) ;
3370+ assert_eq ! ( true . to_json( ) , Boolean ( true ) ) ;
3371+ assert_eq ! ( false . to_json( ) , Boolean ( false ) ) ;
3372+ assert_eq ! ( "abc" . to_string( ) . to_json( ) , String ( "abc" . to_string( ) ) ) ;
3373+ assert_eq ! ( ( 1 , 2 ) . to_json( ) , list2) ;
3374+ assert_eq ! ( ( 1 , 2 , 3 ) . to_json( ) , list3) ;
3375+ assert_eq ! ( [ 1 , 2 ] . to_json( ) , list2) ;
3376+ assert_eq ! ( ( & [ 1 , 2 , 3 ] ) . to_json( ) , list3) ;
3377+ assert_eq ! ( ( ~[ 1 , 2 ] ) . to_json( ) , list2) ;
3378+ assert_eq ! ( vec!( 1 , 2 , 3 ) . to_json( ) , list3) ;
3379+ let mut tree_map = TreeMap :: new ( ) ;
3380+ tree_map. insert ( "a" . to_string ( ) , 1 ) ;
3381+ tree_map. insert ( "b" . to_string ( ) , 2 ) ;
3382+ assert_eq ! ( tree_map. to_json( ) , object) ;
3383+ let mut hash_map = HashMap :: new ( ) ;
3384+ hash_map. insert ( "a" . to_string ( ) , 1 ) ;
3385+ hash_map. insert ( "b" . to_string ( ) , 2 ) ;
3386+ assert_eq ! ( hash_map. to_json( ) , object) ;
3387+ assert_eq ! ( Some ( 15 ) . to_json( ) , Number ( 15 as f64 ) ) ;
3388+ assert_eq ! ( None :: <int>. to_json( ) , Null ) ;
3389+ }
3390+
33373391 #[ bench]
33383392 fn bench_streaming_small ( b : & mut Bencher ) {
33393393 b. iter ( || {
0 commit comments