Allow f32 and f64 to deserialize into each other
This commit is contained in:
parent
0788edaaed
commit
d1a5389060
|
@ -118,12 +118,18 @@ impl<'de, 'a> serde::de::Deserializer<'de> for &'a mut Deserializer<'de>
|
|||
|
||||
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value> where V: Visitor<'de>
|
||||
{
|
||||
visitor.visit_f32(self.input.value().to_float()?)
|
||||
match self.input.value().as_double() {
|
||||
Some(d) => visitor.visit_f32(d as f32),
|
||||
None => visitor.visit_f32(self.input.value().to_float()?),
|
||||
}
|
||||
}
|
||||
|
||||
fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value> where V: Visitor<'de>
|
||||
{
|
||||
visitor.visit_f64(self.input.value().to_double()?)
|
||||
match self.input.value().as_float() {
|
||||
Some(f) => visitor.visit_f64(f as f64),
|
||||
None => visitor.visit_f64(self.input.value().to_double()?),
|
||||
}
|
||||
}
|
||||
|
||||
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value> where V: Visitor<'de>
|
||||
|
|
|
@ -701,12 +701,22 @@ impl<'de, S: BinarySource<'de>> Reader<'de> for BinaryReader<'de, S> {
|
|||
let bs: &[u8] = &self.readbytes(4)?;
|
||||
Ok(f32::from_bits(u32::from_be_bytes(bs.try_into().unwrap())))
|
||||
},
|
||||
(Op::Misc(0), 3) => {
|
||||
self.skip()?;
|
||||
let bs: &[u8] = &self.readbytes(8)?;
|
||||
Ok(f64::from_bits(u64::from_be_bytes(bs.try_into().unwrap())) as f32)
|
||||
},
|
||||
_ => Err(self.expected(ExpectedKind::Float)),
|
||||
}
|
||||
}
|
||||
|
||||
fn next_double(&mut self) -> ReaderResult<f64> {
|
||||
match self.peek_next_nonannotation_op()? {
|
||||
(Op::Misc(0), 2) => {
|
||||
self.skip()?;
|
||||
let bs: &[u8] = &self.readbytes(4)?;
|
||||
Ok(f32::from_bits(u32::from_be_bytes(bs.try_into().unwrap())) as f64)
|
||||
},
|
||||
(Op::Misc(0), 3) => {
|
||||
self.skip()?;
|
||||
let bs: &[u8] = &self.readbytes(8)?;
|
||||
|
|
Loading…
Reference in New Issue