@@ -437,77 +437,6 @@ mod test {
437437 test_from_slice ! ( Data , & br#"{"content":[1,2,3,4,5]}"# [ ..] ) ;
438438 }
439439
440- use std:: {
441- fmt:: { Formatter , Result as FmtResult } ,
442- result:: Result as StdResult ,
443- } ;
444-
445- fn my_deseirlize_seq < ' de , D > ( deserializer : D ) -> StdResult < ( i64 , i64 ) , D :: Error >
446- where
447- D : serde:: de:: Deserializer < ' de > ,
448- {
449- struct TupleVisitor ;
450-
451- impl < ' de > serde:: de:: Visitor < ' de > for TupleVisitor {
452- type Value = ( i64 , i64 ) ;
453-
454- fn expecting ( & self , formatter : & mut Formatter ) -> FmtResult {
455- formatter. write_str ( "expect an array" )
456- }
457-
458- fn visit_seq < S > ( self , mut seq : S ) -> StdResult < Self :: Value , S :: Error >
459- where
460- S : serde:: de:: SeqAccess < ' de > ,
461- {
462- let x = seq
463- . next_element :: < i64 > ( ) ?
464- . ok_or_else ( || serde:: de:: Error :: invalid_length ( 0 , & self ) ) ?;
465- let y = seq
466- . next_element :: < i64 > ( ) ?
467- . ok_or_else ( || serde:: de:: Error :: invalid_length ( 1 , & self ) ) ?;
468- Ok ( ( x, y) )
469- }
470- }
471-
472- deserializer. deserialize_seq ( TupleVisitor )
473- }
474-
475- fn my_deseirlize_map < ' de , D > ( deserializer : D ) -> StdResult < ( String , i64 ) , D :: Error >
476- where
477- D : serde:: de:: Deserializer < ' de > ,
478- {
479- struct MapVisitor ;
480-
481- impl < ' de > serde:: de:: Visitor < ' de > for MapVisitor {
482- type Value = ( String , i64 ) ;
483-
484- fn expecting ( & self , formatter : & mut Formatter ) -> FmtResult {
485- formatter. write_str ( "expect an array" )
486- }
487-
488- fn visit_map < S > ( self , mut map : S ) -> StdResult < Self :: Value , S :: Error >
489- where
490- S : serde:: de:: MapAccess < ' de > ,
491- {
492- let x = map
493- . next_key ( ) ?
494- . ok_or_else ( || serde:: de:: Error :: custom ( "miss a key" ) ) ?;
495- let y = map. next_value :: < i64 > ( ) ?;
496- Ok ( ( x, y) )
497- }
498- }
499-
500- deserializer. deserialize_map ( MapVisitor )
501- }
502-
503- #[ derive( serde:: Deserialize , Debug , Eq , PartialEq ) ]
504- struct MyTuple {
505- #[ serde( deserialize_with = "my_deseirlize_seq" ) ]
506- seq : ( i64 , i64 ) ,
507- #[ serde( deserialize_with = "my_deseirlize_map" ) ]
508- map : ( String , i64 ) ,
509- }
510-
511440 #[ test]
512441 fn test_serde_invalid_utf8 ( ) {
513442 let json = r#""王先生""# ;
@@ -737,4 +666,27 @@ mod test {
737666 assert ! ( err. is_syntax( ) ) ;
738667 }
739668 }
669+
670+ #[ test]
671+ fn test_serialize_float_non_trailing_zero ( ) {
672+ use serde:: Serialize ;
673+
674+ #[ derive( Serialize ) ]
675+ struct FloatTest {
676+ value : f64 ,
677+ }
678+
679+ let test = FloatTest { value : 18.0 } ;
680+ let json = to_string ( & test) . unwrap ( ) ;
681+
682+ #[ cfg( feature = "non_trailing_zero" ) ]
683+ assert_eq ! ( json, r#"{"value":18}"# ) ;
684+
685+ #[ cfg( not( feature = "non_trailing_zero" ) ) ]
686+ assert_eq ! ( json, r#"{"value":18.0}"# ) ;
687+
688+ let test = FloatTest { value : 18.1 } ;
689+ let json = to_string ( & test) . unwrap ( ) ;
690+ assert_eq ! ( json, r#"{"value":18.1}"# ) ;
691+ }
740692}
0 commit comments