diff --git a/src/value/convert/mod.rs b/src/value/convert/mod.rs index 2816a72..6968673 100644 --- a/src/value/convert/mod.rs +++ b/src/value/convert/mod.rs @@ -233,8 +233,8 @@ impl TryFrom for ParseIrOpt { fn try_from(v: Value) -> Result { match v { - Value::Int(0) => Ok(ParseIrOpt::Ready(false)), - Value::Int(1) => Ok(ParseIrOpt::Ready(true)), + Value::Int(0) | Value::UInt(0) => Ok(ParseIrOpt::Ready(false)), + Value::Int(_) | Value::UInt(_) => Ok(ParseIrOpt::Ready(true)), Value::Bytes(ref bytes) => match bytes.as_slice() { [b'0'] => Ok(ParseIrOpt::Parsed(false, v)), [b'1'] => Ok(ParseIrOpt::Parsed(true, v)), @@ -1012,6 +1012,26 @@ mod tests { let _ = super::time02::parse_mysql_datetime_string_with_time(s.as_bytes()); } + #[test] + fn parse_int_as_bool(n: i64) { + let val = Value::Int(n); + if n == 0 { + assert_eq!(from_value::(val), false); + } else { + assert_eq!(from_value::(val), true); + } + } + + #[test] + fn parse_uint_as_bool(n: u64) { + let val = Value::UInt(n); + if n == 0 { + assert_eq!(from_value::(val), false); + } else { + assert_eq!(from_value::(val), true); + } + } + #[test] fn i128_roundtrip( bytes_pos in r"16[0-9]{37}",