Merge pull request #1842 from Timmmm/fix2

Allow floats to be deserialized from ints in tagged unions
This commit is contained in:
David Tolnay
2021-01-24 18:48:46 -08:00
committed by GitHub
+21 -13
View File
@@ -1043,6 +1043,25 @@ mod content {
_ => Err(self.invalid_type(&visitor)), _ => Err(self.invalid_type(&visitor)),
} }
} }
fn deserialize_float<V>(self, visitor: V) -> Result<V::Value, E>
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<Content<'de>>, visitor: V) -> Result<V::Value, E> fn visit_content_seq<'de, V, E>(content: Vec<Content<'de>>, visitor: V) -> Result<V::Value, E>
@@ -1182,25 +1201,14 @@ mod content {
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
match self.content { self.deserialize_float(visitor)
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)),
}
} }
fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
match self.content { self.deserialize_float(visitor)
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)),
}
} }
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>