@@ -314,6 +314,23 @@ pub fn error_str(error: ErrorCode) -> &'static str {
314
314
}
315
315
}
316
316
317
+ /// Shortcut function to decode a JSON `&str` into an object
318
+ pub fn decode < T : :: Decodable < Decoder , DecoderError > > ( s : & str ) -> DecodeResult < T > {
319
+ let json = match from_str ( s) {
320
+ Ok ( x) => x,
321
+ Err ( e) => return Err ( ParseError ( e) )
322
+ } ;
323
+
324
+ let mut decoder = Decoder :: new ( json) ;
325
+ :: Decodable :: decode ( & mut decoder)
326
+ }
327
+
328
+ /// Shortcut function to encode a `T` into a JSON `String`
329
+ pub fn encode < ' a , T : Encodable < Encoder < ' a > , io:: IoError > > ( object : & T ) -> String {
330
+ let buff = Encoder :: buffer_encode ( object) ;
331
+ str:: from_utf8_owned ( buff) . unwrap ( )
332
+ }
333
+
317
334
impl fmt:: Show for ErrorCode {
318
335
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
319
336
error_str ( * self ) . fmt ( f)
@@ -382,9 +399,11 @@ impl<'a> Encoder<'a> {
382
399
}
383
400
384
401
/// Encode the specified struct into a json str
402
+ ///
403
+ /// Note: this function is deprecated. Consider using `json::encode` instead.
404
+ #[ deprecated = "Replaced by `json::encode`" ]
385
405
pub fn str_encode < T : Encodable < Encoder < ' a > , io:: IoError > > ( object : & T ) -> String {
386
- let buff = Encoder :: buffer_encode ( object) ;
387
- str:: from_utf8_owned ( buff) . unwrap ( )
406
+ encode ( object)
388
407
}
389
408
}
390
409
@@ -2456,16 +2475,13 @@ mod tests {
2456
2475
2457
2476
#[ test]
2458
2477
fn test_decode_identifiers ( ) {
2459
- let mut decoder = Decoder :: new ( from_str ( "null" ) . unwrap ( ) ) ;
2460
- let v: ( ) = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2478
+ let v: ( ) = super :: decode ( "null" ) . unwrap ( ) ;
2461
2479
assert_eq ! ( v, ( ) ) ;
2462
2480
2463
- let mut decoder = Decoder :: new ( from_str ( "true" ) . unwrap ( ) ) ;
2464
- let v: bool = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2481
+ let v: bool = super :: decode ( "true" ) . unwrap ( ) ;
2465
2482
assert_eq ! ( v, true ) ;
2466
2483
2467
- let mut decoder = Decoder :: new ( from_str ( "false" ) . unwrap ( ) ) ;
2468
- let v: bool = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2484
+ let v: bool = super :: decode ( "false" ) . unwrap ( ) ;
2469
2485
assert_eq ! ( v, false ) ;
2470
2486
}
2471
2487
@@ -2492,32 +2508,25 @@ mod tests {
2492
2508
2493
2509
#[ test]
2494
2510
fn test_decode_numbers ( ) {
2495
- let mut decoder = Decoder :: new ( from_str ( "3" ) . unwrap ( ) ) ;
2496
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2511
+ let v: f64 = super :: decode ( "3" ) . unwrap ( ) ;
2497
2512
assert_eq ! ( v, 3.0 ) ;
2498
2513
2499
- let mut decoder = Decoder :: new ( from_str ( "3.1" ) . unwrap ( ) ) ;
2500
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2514
+ let v: f64 = super :: decode ( "3.1" ) . unwrap ( ) ;
2501
2515
assert_eq ! ( v, 3.1 ) ;
2502
2516
2503
- let mut decoder = Decoder :: new ( from_str ( "-1.2" ) . unwrap ( ) ) ;
2504
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2517
+ let v: f64 = super :: decode ( "-1.2" ) . unwrap ( ) ;
2505
2518
assert_eq ! ( v, -1.2 ) ;
2506
2519
2507
- let mut decoder = Decoder :: new ( from_str ( "0.4" ) . unwrap ( ) ) ;
2508
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2520
+ let v: f64 = super :: decode ( "0.4" ) . unwrap ( ) ;
2509
2521
assert_eq ! ( v, 0.4 ) ;
2510
2522
2511
- let mut decoder = Decoder :: new ( from_str ( "0.4e5" ) . unwrap ( ) ) ;
2512
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2523
+ let v: f64 = super :: decode ( "0.4e5" ) . unwrap ( ) ;
2513
2524
assert_eq ! ( v, 0.4e5 ) ;
2514
2525
2515
- let mut decoder = Decoder :: new ( from_str ( "0.4e15" ) . unwrap ( ) ) ;
2516
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2526
+ let v: f64 = super :: decode ( "0.4e15" ) . unwrap ( ) ;
2517
2527
assert_eq ! ( v, 0.4e15 ) ;
2518
2528
2519
- let mut decoder = Decoder :: new ( from_str ( "0.4e-01" ) . unwrap ( ) ) ;
2520
- let v: f64 = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2529
+ let v: f64 = super :: decode ( "0.4e-01" ) . unwrap ( ) ;
2521
2530
assert_eq ! ( v, 0.4e-01 ) ;
2522
2531
}
2523
2532
@@ -2551,13 +2560,8 @@ mod tests {
2551
2560
( "\" \\ uAB12\" " , "\uAB12 " ) ] ;
2552
2561
2553
2562
for & ( i, o) in s. iter ( ) {
2554
- let mut decoder = Decoder :: new ( from_str ( i) . unwrap ( ) ) ;
2555
- let v: String = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2563
+ let v: String = super :: decode ( i) . unwrap ( ) ;
2556
2564
assert_eq ! ( v. as_slice( ) , o) ;
2557
-
2558
- let mut decoder = Decoder :: new ( from_str ( i) . unwrap ( ) ) ;
2559
- let v: String = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2560
- assert_eq ! ( v, o. to_string( ) ) ;
2561
2565
}
2562
2566
}
2563
2567
@@ -2584,28 +2588,19 @@ mod tests {
2584
2588
2585
2589
#[ test]
2586
2590
fn test_decode_list ( ) {
2587
- let mut decoder = Decoder :: new ( from_str ( "[]" ) . unwrap ( ) ) ;
2588
- let v: Vec < ( ) > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2591
+ let v: Vec < ( ) > = super :: decode ( "[]" ) . unwrap ( ) ;
2589
2592
assert_eq ! ( v, vec![ ] ) ;
2590
2593
2591
- let mut decoder = Decoder :: new ( from_str ( "[null]" ) . unwrap ( ) ) ;
2592
- let v: Vec < ( ) > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2594
+ let v: Vec < ( ) > = super :: decode ( "[null]" ) . unwrap ( ) ;
2593
2595
assert_eq ! ( v, vec![ ( ) ] ) ;
2594
2596
2595
- let mut decoder = Decoder :: new ( from_str ( "[true]" ) . unwrap ( ) ) ;
2596
- let v: Vec < bool > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2597
+ let v: Vec < bool > = super :: decode ( "[true]" ) . unwrap ( ) ;
2597
2598
assert_eq ! ( v, vec![ true ] ) ;
2598
2599
2599
- let mut decoder = Decoder :: new ( from_str ( "[true]" ) . unwrap ( ) ) ;
2600
- let v: Vec < bool > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2601
- assert_eq ! ( v, vec![ true ] ) ;
2602
-
2603
- let mut decoder = Decoder :: new ( from_str ( "[3, 1]" ) . unwrap ( ) ) ;
2604
- let v: Vec < int > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2600
+ let v: Vec < int > = super :: decode ( "[3, 1]" ) . unwrap ( ) ;
2605
2601
assert_eq ! ( v, vec![ 3 , 1 ] ) ;
2606
2602
2607
- let mut decoder = Decoder :: new ( from_str ( "[[3], [1, 2]]" ) . unwrap ( ) ) ;
2608
- let v: Vec < Vec < uint > > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2603
+ let v: Vec < Vec < uint > > = super :: decode ( "[[3], [1, 2]]" ) . unwrap ( ) ;
2609
2604
assert_eq ! ( v, vec![ vec![ 3 ] , vec![ 1 , 2 ] ] ) ;
2610
2605
}
2611
2606
@@ -2671,8 +2666,8 @@ mod tests {
2671
2666
{ \" a\" : null, \" b\" : 2, \" c\" : [\" abc\" , \" xyz\" ] }
2672
2667
]
2673
2668
}" ;
2674
- let mut decoder = Decoder :: new ( from_str ( s ) . unwrap ( ) ) ;
2675
- let v: Outer = Decodable :: decode ( & mut decoder ) . unwrap ( ) ;
2669
+
2670
+ let v: Outer = super :: decode ( s ) . unwrap ( ) ;
2676
2671
assert_eq ! (
2677
2672
v,
2678
2673
Outer {
@@ -2690,44 +2685,37 @@ mod tests {
2690
2685
}
2691
2686
#[ test]
2692
2687
fn test_decode_struct_with_nan ( ) {
2693
- let encoded_str = "{\" f\" :null,\" a\" :[null,123]}" ;
2694
- let json_object = from_str ( encoded_str. as_slice ( ) ) ;
2695
- let mut decoder = Decoder :: new ( json_object. unwrap ( ) ) ;
2696
- let after: FloatStruct = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2697
- assert ! ( after. f. is_nan( ) ) ;
2698
- assert ! ( after. a. get( 0 ) . is_nan( ) ) ;
2699
- assert_eq ! ( after. a. get( 1 ) , & 123f64 ) ;
2688
+ let s = "{\" f\" :null,\" a\" :[null,123]}" ;
2689
+ let obj: FloatStruct = super :: decode ( s) . unwrap ( ) ;
2690
+ assert ! ( obj. f. is_nan( ) ) ;
2691
+ assert ! ( obj. a. get( 0 ) . is_nan( ) ) ;
2692
+ assert_eq ! ( obj. a. get( 1 ) , & 123f64 ) ;
2700
2693
}
2701
2694
2702
2695
#[ test]
2703
2696
fn test_decode_option ( ) {
2704
- let mut decoder = Decoder :: new ( from_str ( "null" ) . unwrap ( ) ) ;
2705
- let value: Option < String > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2697
+ let value: Option < String > = super :: decode ( "null" ) . unwrap ( ) ;
2706
2698
assert_eq ! ( value, None ) ;
2707
2699
2708
- let mut decoder = Decoder :: new ( from_str ( "\" jodhpurs\" " ) . unwrap ( ) ) ;
2709
- let value: Option < String > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2700
+ let value: Option < String > = super :: decode ( "\" jodhpurs\" " ) . unwrap ( ) ;
2710
2701
assert_eq ! ( value, Some ( "jodhpurs" . to_string( ) ) ) ;
2711
2702
}
2712
2703
2713
2704
#[ test]
2714
2705
fn test_decode_enum ( ) {
2715
- let mut decoder = Decoder :: new ( from_str ( "\" Dog\" " ) . unwrap ( ) ) ;
2716
- let value: Animal = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2706
+ let value: Animal = super :: decode ( "\" Dog\" " ) . unwrap ( ) ;
2717
2707
assert_eq ! ( value, Dog ) ;
2718
2708
2719
2709
let s = "{\" variant\" :\" Frog\" ,\" fields\" :[\" Henry\" ,349]}" ;
2720
- let mut decoder = Decoder :: new ( from_str ( s) . unwrap ( ) ) ;
2721
- let value: Animal = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2710
+ let value: Animal = super :: decode ( s) . unwrap ( ) ;
2722
2711
assert_eq ! ( value, Frog ( "Henry" . to_string( ) , 349 ) ) ;
2723
2712
}
2724
2713
2725
2714
#[ test]
2726
2715
fn test_decode_map ( ) {
2727
2716
let s = "{\" a\" : \" Dog\" , \" b\" : {\" variant\" :\" Frog\" ,\
2728
2717
\" fields\" :[\" Henry\" , 349]}}";
2729
- let mut decoder = Decoder :: new ( from_str ( s) . unwrap ( ) ) ;
2730
- let mut map: TreeMap < String , Animal > = Decodable :: decode ( & mut decoder) . unwrap ( ) ;
2718
+ let mut map: TreeMap < String , Animal > = super :: decode ( s) . unwrap ( ) ;
2731
2719
2732
2720
assert_eq ! ( map. pop( & "a" . to_string( ) ) , Some ( Dog ) ) ;
2733
2721
assert_eq ! ( map. pop( & "b" . to_string( ) ) , Some ( Frog ( "Henry" . to_string( ) , 349 ) ) ) ;
0 commit comments