@@ -2227,6 +2227,10 @@ impl<A:ToJson,B:ToJson,C:ToJson> ToJson for (A, B, C) {
2227
2227
}
2228
2228
}
2229
2229
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
+
2230
2234
impl < A : ToJson > ToJson for ~[ A ] {
2231
2235
fn to_json ( & self ) -> Json { List ( self . iter ( ) . map ( |elt| elt. to_json ( ) ) . collect ( ) ) }
2232
2236
}
@@ -3334,6 +3338,56 @@ mod tests {
3334
3338
assert ! ( stack. get( 1 ) == Key ( "foo" ) ) ;
3335
3339
}
3336
3340
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
+
3337
3391
#[ bench]
3338
3392
fn bench_streaming_small ( b : & mut Bencher ) {
3339
3393
b. iter ( || {
0 commit comments