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>
|
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>
|
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>
|
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)?;
|
let bs: &[u8] = &self.readbytes(4)?;
|
||||||
Ok(f32::from_bits(u32::from_be_bytes(bs.try_into().unwrap())))
|
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)),
|
_ => Err(self.expected(ExpectedKind::Float)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn next_double(&mut self) -> ReaderResult<f64> {
|
fn next_double(&mut self) -> ReaderResult<f64> {
|
||||||
match self.peek_next_nonannotation_op()? {
|
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) => {
|
(Op::Misc(0), 3) => {
|
||||||
self.skip()?;
|
self.skip()?;
|
||||||
let bs: &[u8] = &self.readbytes(8)?;
|
let bs: &[u8] = &self.readbytes(8)?;
|
||||||
|
|
Loading…
Reference in New Issue