|
|
|
@ -503,28 +503,43 @@ where
|
|
|
|
|
{
|
|
|
|
|
let self_number: JsonNumber = self_input.into();
|
|
|
|
|
let other_number: JsonNumber = other_input.into();
|
|
|
|
|
// TODO: Figure out how javascript compares floats and ints
|
|
|
|
|
match (self_number, other_number) {
|
|
|
|
|
(JsonNumber::Failure, _) => return None,
|
|
|
|
|
(_, JsonNumber::Failure) => return None,
|
|
|
|
|
(JsonNumber::UnsignedInteger(self_num), JsonNumber::UnsignedInteger(other_num)) => {
|
|
|
|
|
return self_num.partial_cmp(&other_num)
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::UnsignedInteger(_self_num), JsonNumber::SignedInteger(_other_num)) => {
|
|
|
|
|
return Some(Ordering::Greater)
|
|
|
|
|
(JsonNumber::UnsignedInteger(self_num), JsonNumber::SignedInteger(other_num)) => {
|
|
|
|
|
if self_num < std::i64::MAX as u64 {
|
|
|
|
|
return (self_num as i64).partial_cmp(&other_num);
|
|
|
|
|
} else {
|
|
|
|
|
return Some(Ordering::Greater);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::UnsignedInteger(self_num), JsonNumber::Decimal(other_num)) => {
|
|
|
|
|
return (self_num as f64).partial_cmp(&other_num)
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::UnsignedInteger(_self_num), JsonNumber::Decimal(_other_num)) => return None,
|
|
|
|
|
|
|
|
|
|
(JsonNumber::SignedInteger(_self_num), JsonNumber::UnsignedInteger(_other_num)) => {
|
|
|
|
|
return Some(Ordering::Less)
|
|
|
|
|
(JsonNumber::SignedInteger(self_num), JsonNumber::UnsignedInteger(other_num)) => {
|
|
|
|
|
if other_num < std::i64::MAX as u64 {
|
|
|
|
|
return self_num.partial_cmp(&(other_num as i64));
|
|
|
|
|
} else {
|
|
|
|
|
return Some(Ordering::Less);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::SignedInteger(self_num), JsonNumber::SignedInteger(other_num)) => {
|
|
|
|
|
return self_num.partial_cmp(&other_num)
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::SignedInteger(_self_num), JsonNumber::Decimal(_other_num)) => return None,
|
|
|
|
|
(JsonNumber::SignedInteger(self_num), JsonNumber::Decimal(other_num)) => {
|
|
|
|
|
return (self_num as f64).partial_cmp(&other_num)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
(JsonNumber::Decimal(_self_num), JsonNumber::UnsignedInteger(_other_num)) => return None,
|
|
|
|
|
(JsonNumber::Decimal(_self_num), JsonNumber::SignedInteger(_other_num)) => return None,
|
|
|
|
|
(JsonNumber::Decimal(self_num), JsonNumber::UnsignedInteger(other_num)) => {
|
|
|
|
|
return self_num.partial_cmp(&(other_num as f64))
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::Decimal(self_num), JsonNumber::SignedInteger(other_num)) => {
|
|
|
|
|
return self_num.partial_cmp(&(other_num as f64))
|
|
|
|
|
}
|
|
|
|
|
(JsonNumber::Decimal(self_num), JsonNumber::Decimal(other_num)) => {
|
|
|
|
|
return self_num.partial_cmp(&other_num)
|
|
|
|
|
}
|
|
|
|
|