@@ -233,8 +233,8 @@ impl TryFrom<Value> for ParseIrOpt<bool> {
233
233
234
234
fn try_from ( v : Value ) -> Result < Self , Self :: Error > {
235
235
match v {
236
- Value :: Int ( 0 ) => Ok ( ParseIrOpt :: Ready ( false ) ) ,
237
- Value :: Int ( 1 ) => Ok ( ParseIrOpt :: Ready ( true ) ) ,
236
+ Value :: Int ( 0 ) | Value :: UInt ( 0 ) => Ok ( ParseIrOpt :: Ready ( false ) ) ,
237
+ Value :: Int ( _ ) | Value :: UInt ( _ ) => Ok ( ParseIrOpt :: Ready ( true ) ) ,
238
238
Value :: Bytes ( ref bytes) => match bytes. as_slice ( ) {
239
239
[ b'0' ] => Ok ( ParseIrOpt :: Parsed ( false , v) ) ,
240
240
[ b'1' ] => Ok ( ParseIrOpt :: Parsed ( true , v) ) ,
@@ -1012,6 +1012,26 @@ mod tests {
1012
1012
let _ = super :: time02:: parse_mysql_datetime_string_with_time( s. as_bytes( ) ) ;
1013
1013
}
1014
1014
1015
+ #[ test]
1016
+ fn parse_int_as_bool( n: i64 ) {
1017
+ let val = Value :: Int ( n) ;
1018
+ if n == 0 {
1019
+ assert_eq!( from_value:: <bool >( val) , false ) ;
1020
+ } else {
1021
+ assert_eq!( from_value:: <bool >( val) , true ) ;
1022
+ }
1023
+ }
1024
+
1025
+ #[ test]
1026
+ fn parse_uint_as_bool( n: u64 ) {
1027
+ let val = Value :: UInt ( n) ;
1028
+ if n == 0 {
1029
+ assert_eq!( from_value:: <bool >( val) , false ) ;
1030
+ } else {
1031
+ assert_eq!( from_value:: <bool >( val) , true ) ;
1032
+ }
1033
+ }
1034
+
1015
1035
#[ test]
1016
1036
fn i128_roundtrip(
1017
1037
bytes_pos in r"16[0-9]{37}" ,
0 commit comments