From 010444dfa474d1b5b31dea448063967bacc58333 Mon Sep 17 00:00:00 2001 From: Tim Hutt Date: Fri, 6 Mar 2020 15:02:11 +0000 Subject: [PATCH] Allow floats to be deserialized from ints in tagged unions --- serde/src/private/de.rs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs index eb5424cc8..9d99aad97 100644 --- a/serde/src/private/de.rs +++ b/serde/src/private/de.rs @@ -1040,6 +1040,25 @@ mod content { _ => Err(self.invalid_type(&visitor)), } } + + fn deserialize_float(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + match self.content { + Content::F32(v) => visitor.visit_f32(v), + Content::F64(v) => visitor.visit_f64(v), + Content::U8(v) => visitor.visit_u8(v), + Content::U16(v) => visitor.visit_u16(v), + Content::U32(v) => visitor.visit_u32(v), + Content::U64(v) => visitor.visit_u64(v), + Content::I8(v) => visitor.visit_i8(v), + Content::I16(v) => visitor.visit_i16(v), + Content::I32(v) => visitor.visit_i32(v), + Content::I64(v) => visitor.visit_i64(v), + _ => Err(self.invalid_type(&visitor)), + } + } } fn visit_content_seq<'de, V, E>(content: Vec>, visitor: V) -> Result @@ -1179,25 +1198,14 @@ mod content { where V: Visitor<'de>, { - match self.content { - Content::F32(v) => visitor.visit_f32(v), - Content::F64(v) => visitor.visit_f64(v), - Content::U64(v) => visitor.visit_u64(v), - Content::I64(v) => visitor.visit_i64(v), - _ => Err(self.invalid_type(&visitor)), - } + self.deserialize_float(visitor) } fn deserialize_f64(self, visitor: V) -> Result where V: Visitor<'de>, { - match self.content { - Content::F64(v) => visitor.visit_f64(v), - Content::U64(v) => visitor.visit_u64(v), - Content::I64(v) => visitor.visit_i64(v), - _ => Err(self.invalid_type(&visitor)), - } + self.deserialize_float(visitor) } fn deserialize_char(self, visitor: V) -> Result