diff --git a/src/de.rs b/src/de.rs index af0aeb74..72d1e5df 100644 --- a/src/de.rs +++ b/src/de.rs @@ -730,11 +730,11 @@ where 0xf8 => Err(self.error(ErrorCode::UnassignedCode)), 0xf9 => { let value = self.parse_f16()?; - visitor.visit_f32(value) + visitor.visit_f64(value as f64) } 0xfa => { let value = self.parse_f32()?; - visitor.visit_f32(value) + visitor.visit_f64(value as f64) } 0xfb => { let value = self.parse_f64()?; diff --git a/tests/roundtrip.rs b/tests/roundtrip.rs new file mode 100644 index 00000000..91bf441b --- /dev/null +++ b/tests/roundtrip.rs @@ -0,0 +1,31 @@ +#[macro_use] +extern crate serde_derive; + +#[cfg(feature = "std")] +mod roundtrip { + + use serde_cbor; + + #[derive(Serialize, Deserialize, Debug, PartialEq)] + struct MyStuff { + #[serde(flatten)] + data: MyStuffType, + } + + #[derive(Serialize, Deserialize, Debug, PartialEq)] + enum MyStuffType { + Ver1 { x: f64, y: f32 }, + Ver2, + } + + #[test] + /// Test roundtrip operation on a serde data structure. + fn test_roundtrip() { + let stuff1 = MyStuff { + data: MyStuffType::Ver1 { x: 2.5, y: 2.5 }, + }; + let data_bytes = serde_cbor::to_vec(&stuff1).unwrap(); + let stuff2 = serde_cbor::from_slice(&data_bytes).unwrap(); + assert_eq!(stuff1, stuff2); + } +}