@@ -741,22 +741,22 @@ mod tests {
741741
742742 #[ test]
743743 fn array ( ) {
744- assert_eq ! ( crate :: from_str:: <[ i32 ; 0 ] >( "[]" ) , Ok ( [ ] ) ) ;
745- assert_eq ! ( crate :: from_str( "[0, 1, 2]" ) , Ok ( [ 0 , 1 , 2 ] ) ) ;
744+ assert_eq ! ( crate :: from_str:: <[ i32 ; 0 ] >( "[]" ) , Ok ( ( [ ] , 2 ) ) ) ;
745+ assert_eq ! ( crate :: from_str( "[0, 1, 2]" ) , Ok ( ( [ 0 , 1 , 2 ] , 9 ) ) ) ;
746746
747747 // errors
748748 assert ! ( crate :: from_str:: <[ i32 ; 2 ] >( "[0, 1,]" ) . is_err( ) ) ;
749749 }
750750
751751 #[ test]
752752 fn bool ( ) {
753- assert_eq ! ( crate :: from_str( "true" ) , Ok ( true ) ) ;
754- assert_eq ! ( crate :: from_str( " true" ) , Ok ( true ) ) ;
755- assert_eq ! ( crate :: from_str( "true " ) , Ok ( true ) ) ;
753+ assert_eq ! ( crate :: from_str( "true" ) , Ok ( ( true , 4 ) ) ) ;
754+ assert_eq ! ( crate :: from_str( " true" ) , Ok ( ( true , 5 ) ) ) ;
755+ assert_eq ! ( crate :: from_str( "true " ) , Ok ( ( true , 5 ) ) ) ;
756756
757- assert_eq ! ( crate :: from_str( "false" ) , Ok ( false ) ) ;
758- assert_eq ! ( crate :: from_str( " false" ) , Ok ( false ) ) ;
759- assert_eq ! ( crate :: from_str( "false " ) , Ok ( false ) ) ;
757+ assert_eq ! ( crate :: from_str( "false" ) , Ok ( ( false , 5 ) ) ) ;
758+ assert_eq ! ( crate :: from_str( " false" ) , Ok ( ( false , 6 ) ) ) ;
759+ assert_eq ! ( crate :: from_str( "false " ) , Ok ( ( false , 6 ) ) ) ;
760760
761761 // errors
762762 assert ! ( crate :: from_str:: <bool >( "true false" ) . is_err( ) ) ;
@@ -765,42 +765,54 @@ mod tests {
765765
766766 #[ test]
767767 fn enum_clike ( ) {
768- assert_eq ! ( crate :: from_str( r#" "boolean" "# ) , Ok ( Type :: Boolean ) ) ;
769- assert_eq ! ( crate :: from_str( r#" "number" "# ) , Ok ( Type :: Number ) ) ;
770- assert_eq ! ( crate :: from_str( r#" "thing" "# ) , Ok ( Type :: Thing ) ) ;
768+ assert_eq ! ( crate :: from_str( r#" "boolean" "# ) , Ok ( ( Type :: Boolean , 11 ) ) ) ;
769+ assert_eq ! ( crate :: from_str( r#" "number" "# ) , Ok ( ( Type :: Number , 10 ) ) ) ;
770+ assert_eq ! ( crate :: from_str( r#" "thing" "# ) , Ok ( ( Type :: Thing , 9 ) ) ) ;
771771 }
772772
773773 #[ test]
774774 fn str ( ) {
775- assert_eq ! ( crate :: from_str( r#" "hello" "# ) , Ok ( "hello" ) ) ;
776- assert_eq ! ( crate :: from_str( r#" "" "# ) , Ok ( "" ) ) ;
777- assert_eq ! ( crate :: from_str( r#" " " "# ) , Ok ( " " ) ) ;
778- assert_eq ! ( crate :: from_str( r#" "👏" "# ) , Ok ( "👏" ) ) ;
775+ assert_eq ! ( crate :: from_str( r#" "hello" "# ) , Ok ( ( "hello" , 9 ) ) ) ;
776+ assert_eq ! ( crate :: from_str( r#" "" "# ) , Ok ( ( "" , 4 ) ) ) ;
777+ assert_eq ! ( crate :: from_str( r#" " " "# ) , Ok ( ( " " , 5 ) ) ) ;
778+ assert_eq ! ( crate :: from_str( r#" "👏" "# ) , Ok ( ( "👏" , 8 ) ) ) ;
779779
780780 // no unescaping is done (as documented as a known issue in lib.rs)
781- assert_eq ! ( crate :: from_str( r#" "hel\tlo" "# ) , Ok ( "hel\\ tlo" ) ) ;
782- assert_eq ! ( crate :: from_str( r#" "hello \\" "# ) , Ok ( "hello \\ \\ " ) ) ;
781+ assert_eq ! ( crate :: from_str( r#" "hel\tlo" "# ) , Ok ( ( "hel\\ tlo" , 11 ) ) ) ;
782+ assert_eq ! ( crate :: from_str( r#" "hello \\" "# ) , Ok ( ( "hello \\ \\ " , 12 ) ) ) ;
783783
784784 // escaped " in the string content
785- assert_eq ! ( crate :: from_str( r#" "foo\"bar" "# ) , Ok ( r#"foo\"bar"# ) ) ;
786- assert_eq ! ( crate :: from_str( r#" "foo\\\"bar" "# ) , Ok ( r#"foo\\\"bar"# ) ) ;
787- assert_eq ! ( crate :: from_str( r#" "foo\"\"bar" "# ) , Ok ( r#"foo\"\"bar"# ) ) ;
788- assert_eq ! ( crate :: from_str( r#" "\"bar" "# ) , Ok ( r#"\"bar"# ) ) ;
789- assert_eq ! ( crate :: from_str( r#" "foo\"" "# ) , Ok ( r#"foo\""# ) ) ;
790- assert_eq ! ( crate :: from_str( r#" "\"" "# ) , Ok ( r#"\""# ) ) ;
785+ assert_eq ! ( crate :: from_str( r#" "foo\"bar" "# ) , Ok ( ( r#"foo\"bar"# , 12 ) ) ) ;
786+ assert_eq ! (
787+ crate :: from_str( r#" "foo\\\"bar" "# ) ,
788+ Ok ( ( r#"foo\\\"bar"# , 14 ) )
789+ ) ;
790+ assert_eq ! (
791+ crate :: from_str( r#" "foo\"\"bar" "# ) ,
792+ Ok ( ( r#"foo\"\"bar"# , 14 ) )
793+ ) ;
794+ assert_eq ! ( crate :: from_str( r#" "\"bar" "# ) , Ok ( ( r#"\"bar"# , 9 ) ) ) ;
795+ assert_eq ! ( crate :: from_str( r#" "foo\"" "# ) , Ok ( ( r#"foo\""# , 9 ) ) ) ;
796+ assert_eq ! ( crate :: from_str( r#" "\"" "# ) , Ok ( ( r#"\""# , 6 ) ) ) ;
791797
792798 // non-excaped " preceded by backslashes
793- assert_eq ! ( crate :: from_str( r#" "foo bar\\" "# ) , Ok ( r#"foo bar\\"# ) ) ;
794- assert_eq ! ( crate :: from_str( r#" "foo bar\\\\" "# ) , Ok ( r#"foo bar\\\\"# ) ) ;
799+ assert_eq ! (
800+ crate :: from_str( r#" "foo bar\\" "# ) ,
801+ Ok ( ( r#"foo bar\\"# , 13 ) )
802+ ) ;
803+ assert_eq ! (
804+ crate :: from_str( r#" "foo bar\\\\" "# ) ,
805+ Ok ( ( r#"foo bar\\\\"# , 15 ) )
806+ ) ;
795807 assert_eq ! (
796808 crate :: from_str( r#" "foo bar\\\\\\" "# ) ,
797- Ok ( r#"foo bar\\\\\\"# )
809+ Ok ( ( r#"foo bar\\\\\\"# , 17 ) )
798810 ) ;
799811 assert_eq ! (
800812 crate :: from_str( r#" "foo bar\\\\\\\\" "# ) ,
801- Ok ( r#"foo bar\\\\\\\\"# )
813+ Ok ( ( r#"foo bar\\\\\\\\"# , 19 ) )
802814 ) ;
803- assert_eq ! ( crate :: from_str( r#" "\\" "# ) , Ok ( r#"\\"# ) ) ;
815+ assert_eq ! ( crate :: from_str( r#" "\\" "# ) , Ok ( ( r#"\\"# , 6 ) ) ) ;
804816 }
805817
806818 #[ test]
@@ -810,10 +822,13 @@ mod tests {
810822 led : bool ,
811823 }
812824
813- assert_eq ! ( crate :: from_str( r#"{ "led": true }"# ) , Ok ( Led { led: true } ) ) ;
825+ assert_eq ! (
826+ crate :: from_str( r#"{ "led": true }"# ) ,
827+ Ok ( ( Led { led: true } , 15 ) )
828+ ) ;
814829 assert_eq ! (
815830 crate :: from_str( r#"{ "led": false }"# ) ,
816- Ok ( Led { led: false } )
831+ Ok ( ( Led { led: false } , 16 ) )
817832 ) ;
818833 }
819834
@@ -826,17 +841,17 @@ mod tests {
826841
827842 assert_eq ! (
828843 crate :: from_str( r#"{ "temperature": -17 }"# ) ,
829- Ok ( Temperature { temperature: -17 } )
844+ Ok ( ( Temperature { temperature: -17 } , 22 ) )
830845 ) ;
831846
832847 assert_eq ! (
833848 crate :: from_str( r#"{ "temperature": -0 }"# ) ,
834- Ok ( Temperature { temperature: -0 } )
849+ Ok ( ( Temperature { temperature: -0 } , 21 ) )
835850 ) ;
836851
837852 assert_eq ! (
838853 crate :: from_str( r#"{ "temperature": 0 }"# ) ,
839- Ok ( Temperature { temperature: 0 } )
854+ Ok ( ( Temperature { temperature: 0 } , 20 ) )
840855 ) ;
841856
842857 // out of range
@@ -853,33 +868,39 @@ mod tests {
853868
854869 assert_eq ! (
855870 crate :: from_str( r#"{ "temperature": -17.2 }"# ) ,
856- Ok ( Temperature { temperature: -17.2 } )
871+ Ok ( ( Temperature { temperature: -17.2 } , 24 ) )
857872 ) ;
858873
859874 assert_eq ! (
860875 crate :: from_str( r#"{ "temperature": -0.0 }"# ) ,
861- Ok ( Temperature { temperature: -0. } )
876+ Ok ( ( Temperature { temperature: -0. } , 23 ) )
862877 ) ;
863878
864879 assert_eq ! (
865880 crate :: from_str( r#"{ "temperature": -2.1e-3 }"# ) ,
866- Ok ( Temperature {
867- temperature: -2.1e-3
868- } )
881+ Ok ( (
882+ Temperature {
883+ temperature: -2.1e-3
884+ } ,
885+ 26
886+ ) )
869887 ) ;
870888
871889 assert_eq ! (
872890 crate :: from_str( r#"{ "temperature": -3 }"# ) ,
873- Ok ( Temperature { temperature: -3. } )
891+ Ok ( ( Temperature { temperature: -3. } , 21 ) )
874892 ) ;
875893
876894 use core:: f32;
877895
878896 assert_eq ! (
879897 crate :: from_str( r#"{ "temperature": -1e500 }"# ) ,
880- Ok ( Temperature {
881- temperature: f32 :: NEG_INFINITY
882- } )
898+ Ok ( (
899+ Temperature {
900+ temperature: f32 :: NEG_INFINITY
901+ } ,
902+ 25
903+ ) )
883904 ) ;
884905
885906 assert ! ( crate :: from_str:: <Temperature >( r#"{ "temperature": 1e1e1 }"# ) . is_err( ) ) ;
@@ -899,17 +920,23 @@ mod tests {
899920
900921 assert_eq ! (
901922 crate :: from_str( r#"{ "description": "An ambient temperature sensor" }"# ) ,
902- Ok ( Property {
903- description: Some ( "An ambient temperature sensor" ) ,
904- } )
923+ Ok ( (
924+ Property {
925+ description: Some ( "An ambient temperature sensor" ) ,
926+ } ,
927+ 50
928+ ) )
905929 ) ;
906930
907931 assert_eq ! (
908932 crate :: from_str( r#"{ "description": null }"# ) ,
909- Ok ( Property { description: None } )
933+ Ok ( ( Property { description: None } , 23 ) )
910934 ) ;
911935
912- assert_eq ! ( crate :: from_str( r#"{}"# ) , Ok ( Property { description: None } ) ) ;
936+ assert_eq ! (
937+ crate :: from_str( r#"{}"# ) ,
938+ Ok ( ( Property { description: None } , 2 ) )
939+ ) ;
913940 }
914941
915942 #[ test]
@@ -921,12 +948,12 @@ mod tests {
921948
922949 assert_eq ! (
923950 crate :: from_str( r#"{ "temperature": 20 }"# ) ,
924- Ok ( Temperature { temperature: 20 } )
951+ Ok ( ( Temperature { temperature: 20 } , 21 ) )
925952 ) ;
926953
927954 assert_eq ! (
928955 crate :: from_str( r#"{ "temperature": 0 }"# ) ,
929- Ok ( Temperature { temperature: 0 } )
956+ Ok ( ( Temperature { temperature: 0 } , 20 ) )
930957 ) ;
931958
932959 // out of range
@@ -940,8 +967,8 @@ mod tests {
940967 #[ derive( Debug , Deserialize , PartialEq ) ]
941968 struct Xy ( i8 , i8 ) ;
942969
943- assert_eq ! ( crate :: from_str( r#"[10, 20]"# ) , Ok ( Xy ( 10 , 20 ) ) ) ;
944- assert_eq ! ( crate :: from_str( r#"[10, -20]"# ) , Ok ( Xy ( 10 , -20 ) ) ) ;
970+ assert_eq ! ( crate :: from_str( r#"[10, 20]"# ) , Ok ( ( Xy ( 10 , 20 ) , 8 ) ) ) ;
971+ assert_eq ! ( crate :: from_str( r#"[10, -20]"# ) , Ok ( ( Xy ( 10 , -20 ) , 9 ) ) ) ;
945972
946973 // wrong number of args
947974 assert_eq ! (
@@ -960,8 +987,8 @@ mod tests {
960987 #[ derive( Debug , Deserialize , PartialEq ) ]
961988 struct Xy ( i8 , i8 ) ;
962989
963- assert_eq ! ( crate :: from_str( r#"[10, 20]"# ) , Ok ( Xy ( 10 , 20 ) ) ) ;
964- assert_eq ! ( crate :: from_str( r#"[10, -20]"# ) , Ok ( Xy ( 10 , -20 ) ) ) ;
990+ assert_eq ! ( crate :: from_str( r#"[10, 20]"# ) , Ok ( ( Xy ( 10 , 20 ) , 8 ) ) ) ;
991+ assert_eq ! ( crate :: from_str( r#"[10, -20]"# ) , Ok ( ( Xy ( 10 , -20 ) , 9 ) ) ) ;
965992
966993 // wrong number of args
967994 assert_eq ! (
@@ -985,31 +1012,31 @@ mod tests {
9851012
9861013 assert_eq ! (
9871014 crate :: from_str( r#"{ "temperature": 20, "high": 80, "low": -10, "updated": true }"# ) ,
988- Ok ( Temperature { temperature: 20 } )
1015+ Ok ( ( Temperature { temperature: 20 } , 62 ) )
9891016 ) ;
9901017
9911018 assert_eq ! (
9921019 crate :: from_str(
9931020 r#"{ "temperature": 20, "conditions": "windy", "forecast": "cloudy" }"#
9941021 ) ,
995- Ok ( Temperature { temperature: 20 } )
1022+ Ok ( ( Temperature { temperature: 20 } , 66 ) )
9961023 ) ;
9971024
9981025 assert_eq ! (
9991026 crate :: from_str( r#"{ "temperature": 20, "hourly_conditions": ["windy", "rainy"] }"# ) ,
1000- Ok ( Temperature { temperature: 20 } )
1027+ Ok ( ( Temperature { temperature: 20 } , 62 ) )
10011028 ) ;
10021029
10031030 assert_eq ! (
10041031 crate :: from_str(
10051032 r#"{ "temperature": 20, "source": { "station": "dock", "sensors": ["front", "back"] } }"#
10061033 ) ,
1007- Ok ( Temperature { temperature: 20 } )
1034+ Ok ( ( Temperature { temperature: 20 } , 84 ) )
10081035 ) ;
10091036
10101037 assert_eq ! (
10111038 crate :: from_str( r#"{ "temperature": 20, "invalid": this-is-ignored }"# ) ,
1012- Ok ( Temperature { temperature: 20 } )
1039+ Ok ( ( Temperature { temperature: 20 } , 49 ) )
10131040 ) ;
10141041
10151042 assert_eq ! (
@@ -1107,29 +1134,32 @@ mod tests {
11071134 }
11081135 "#
11091136 ) ,
1110- Ok ( Thing {
1111- properties: Properties {
1112- temperature: Property {
1113- ty: Type :: Number ,
1114- unit: Some ( "celsius" ) ,
1115- description: Some ( "An ambient temperature sensor" ) ,
1116- href: "/properties/temperature" ,
1117- } ,
1118- humidity: Property {
1119- ty: Type :: Number ,
1120- unit: Some ( "percent" ) ,
1121- description: None ,
1122- href: "/properties/humidity" ,
1123- } ,
1124- led: Property {
1125- ty: Type :: Boolean ,
1126- unit: None ,
1127- description: Some ( "A red LED" ) ,
1128- href: "/properties/led" ,
1137+ Ok ( (
1138+ Thing {
1139+ properties: Properties {
1140+ temperature: Property {
1141+ ty: Type :: Number ,
1142+ unit: Some ( "celsius" ) ,
1143+ description: Some ( "An ambient temperature sensor" ) ,
1144+ href: "/properties/temperature" ,
1145+ } ,
1146+ humidity: Property {
1147+ ty: Type :: Number ,
1148+ unit: Some ( "percent" ) ,
1149+ description: None ,
1150+ href: "/properties/humidity" ,
1151+ } ,
1152+ led: Property {
1153+ ty: Type :: Boolean ,
1154+ unit: None ,
1155+ description: Some ( "A red LED" ) ,
1156+ href: "/properties/led" ,
1157+ } ,
11291158 } ,
1159+ ty: Type :: Thing ,
11301160 } ,
1131- ty : Type :: Thing ,
1132- } )
1161+ 852
1162+ ) )
11331163 )
11341164 }
11351165}
0 commit comments