@@ -314,6 +314,23 @@ pub fn error_str(error: ErrorCode) -> &'static str {
314314 }
315315}
316316
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+
317334impl fmt:: Show for ErrorCode {
318335 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
319336 error_str ( * self ) . fmt ( f)
@@ -382,9 +399,11 @@ impl<'a> Encoder<'a> {
382399 }
383400
384401 /// 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`" ]
385405 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)
388407 }
389408}
390409
@@ -2456,16 +2475,13 @@ mod tests {
24562475
24572476 #[ test]
24582477 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 ( ) ;
24612479 assert_eq ! ( v, ( ) ) ;
24622480
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 ( ) ;
24652482 assert_eq ! ( v, true ) ;
24662483
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 ( ) ;
24692485 assert_eq ! ( v, false ) ;
24702486 }
24712487
@@ -2492,32 +2508,25 @@ mod tests {
24922508
24932509 #[ test]
24942510 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 ( ) ;
24972512 assert_eq ! ( v, 3.0 ) ;
24982513
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 ( ) ;
25012515 assert_eq ! ( v, 3.1 ) ;
25022516
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 ( ) ;
25052518 assert_eq ! ( v, -1.2 ) ;
25062519
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 ( ) ;
25092521 assert_eq ! ( v, 0.4 ) ;
25102522
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 ( ) ;
25132524 assert_eq ! ( v, 0.4e5 ) ;
25142525
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 ( ) ;
25172527 assert_eq ! ( v, 0.4e15 ) ;
25182528
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 ( ) ;
25212530 assert_eq ! ( v, 0.4e-01 ) ;
25222531 }
25232532
@@ -2551,13 +2560,8 @@ mod tests {
25512560 ( "\" \\ uAB12\" " , "\uAB12 " ) ] ;
25522561
25532562 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 ( ) ;
25562564 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( ) ) ;
25612565 }
25622566 }
25632567
@@ -2584,28 +2588,19 @@ mod tests {
25842588
25852589 #[ test]
25862590 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 ( ) ;
25892592 assert_eq ! ( v, vec![ ] ) ;
25902593
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 ( ) ;
25932595 assert_eq ! ( v, vec![ ( ) ] ) ;
25942596
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 ( ) ;
25972598 assert_eq ! ( v, vec![ true ] ) ;
25982599
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 ( ) ;
26052601 assert_eq ! ( v, vec![ 3 , 1 ] ) ;
26062602
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 ( ) ;
26092604 assert_eq ! ( v, vec![ vec![ 3 ] , vec![ 1 , 2 ] ] ) ;
26102605 }
26112606
@@ -2671,8 +2666,8 @@ mod tests {
26712666 { \" a\" : null, \" b\" : 2, \" c\" : [\" abc\" , \" xyz\" ] }
26722667 ]
26732668 }" ;
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 ( ) ;
26762671 assert_eq ! (
26772672 v,
26782673 Outer {
@@ -2690,44 +2685,37 @@ mod tests {
26902685 }
26912686 #[ test]
26922687 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 ) ;
27002693 }
27012694
27022695 #[ test]
27032696 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 ( ) ;
27062698 assert_eq ! ( value, None ) ;
27072699
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 ( ) ;
27102701 assert_eq ! ( value, Some ( "jodhpurs" . to_string( ) ) ) ;
27112702 }
27122703
27132704 #[ test]
27142705 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 ( ) ;
27172707 assert_eq ! ( value, Dog ) ;
27182708
27192709 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 ( ) ;
27222711 assert_eq ! ( value, Frog ( "Henry" . to_string( ) , 349 ) ) ;
27232712 }
27242713
27252714 #[ test]
27262715 fn test_decode_map ( ) {
27272716 let s = "{\" a\" : \" Dog\" , \" b\" : {\" variant\" :\" Frog\" ,\
27282717 \" 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 ( ) ;
27312719
27322720 assert_eq ! ( map. pop( & "a" . to_string( ) ) , Some ( Dog ) ) ;
27332721 assert_eq ! ( map. pop( & "b" . to_string( ) ) , Some ( Frog ( "Henry" . to_string( ) , 349 ) ) ) ;
0 commit comments