Skip to content

Commit f2ac3f3

Browse files
committed
Forward deserialization of primitives to SimpleTypeDeserializer
1 parent b97d223 commit f2ac3f3

File tree

3 files changed

+20
-64
lines changed

3 files changed

+20
-64
lines changed

src/de/map.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::{
1111
events::attributes::IterState,
1212
events::BytesStart,
1313
name::QName,
14-
utils::CowRef,
1514
};
1615
use serde::de::value::BorrowedStrDeserializer;
1716
use serde::de::{self, DeserializeSeed, Deserializer as _, MapAccess, SeqAccess, Visitor};

src/de/mod.rs

Lines changed: 20 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1977,21 +1977,14 @@
19771977
// Also, macros should be imported before using them
19781978
use serde::serde_if_integer128;
19791979

1980-
macro_rules! deserialize_num {
1981-
($deserialize:ident => $visit:ident, $($mut:tt)?) => {
1980+
macro_rules! forward_to_simple_type {
1981+
($deserialize:ident, $($mut:tt)?) => {
1982+
#[inline]
19821983
fn $deserialize<V>($($mut)? self, visitor: V) -> Result<V::Value, DeError>
19831984
where
19841985
V: Visitor<'de>,
19851986
{
1986-
// No need to unescape because valid integer representations cannot be escaped
1987-
let text = self.read_string()?;
1988-
match text.parse() {
1989-
Ok(number) => visitor.$visit(number),
1990-
Err(_) => match text {
1991-
Cow::Borrowed(t) => visitor.visit_str(t),
1992-
Cow::Owned(t) => visitor.visit_string(t),
1993-
}
1994-
}
1987+
SimpleTypeDeserializer::from_text(self.read_string()?).$deserialize(visitor)
19951988
}
19961989
};
19971990
}
@@ -2000,63 +1993,29 @@ macro_rules! deserialize_num {
20001993
/// byte arrays, booleans and identifiers.
20011994
macro_rules! deserialize_primitives {
20021995
($($mut:tt)?) => {
2003-
deserialize_num!(deserialize_i8 => visit_i8, $($mut)?);
2004-
deserialize_num!(deserialize_i16 => visit_i16, $($mut)?);
2005-
deserialize_num!(deserialize_i32 => visit_i32, $($mut)?);
2006-
deserialize_num!(deserialize_i64 => visit_i64, $($mut)?);
1996+
forward_to_simple_type!(deserialize_i8, $($mut)?);
1997+
forward_to_simple_type!(deserialize_i16, $($mut)?);
1998+
forward_to_simple_type!(deserialize_i32, $($mut)?);
1999+
forward_to_simple_type!(deserialize_i64, $($mut)?);
20072000

2008-
deserialize_num!(deserialize_u8 => visit_u8, $($mut)?);
2009-
deserialize_num!(deserialize_u16 => visit_u16, $($mut)?);
2010-
deserialize_num!(deserialize_u32 => visit_u32, $($mut)?);
2011-
deserialize_num!(deserialize_u64 => visit_u64, $($mut)?);
2001+
forward_to_simple_type!(deserialize_u8, $($mut)?);
2002+
forward_to_simple_type!(deserialize_u16, $($mut)?);
2003+
forward_to_simple_type!(deserialize_u32, $($mut)?);
2004+
forward_to_simple_type!(deserialize_u64, $($mut)?);
20122005

20132006
serde_if_integer128! {
2014-
deserialize_num!(deserialize_i128 => visit_i128, $($mut)?);
2015-
deserialize_num!(deserialize_u128 => visit_u128, $($mut)?);
2007+
forward_to_simple_type!(deserialize_i128, $($mut)?);
2008+
forward_to_simple_type!(deserialize_u128, $($mut)?);
20162009
}
20172010

2018-
deserialize_num!(deserialize_f32 => visit_f32, $($mut)?);
2019-
deserialize_num!(deserialize_f64 => visit_f64, $($mut)?);
2011+
forward_to_simple_type!(deserialize_f32, $($mut)?);
2012+
forward_to_simple_type!(deserialize_f64, $($mut)?);
20202013

2021-
fn deserialize_bool<V>($($mut)? self, visitor: V) -> Result<V::Value, DeError>
2022-
where
2023-
V: Visitor<'de>,
2024-
{
2025-
let text = match self.read_string()? {
2026-
Cow::Borrowed(s) => CowRef::Input(s),
2027-
Cow::Owned(s) => CowRef::Owned(s),
2028-
};
2029-
text.deserialize_bool(visitor)
2030-
}
2014+
forward_to_simple_type!(deserialize_bool, $($mut)?);
2015+
forward_to_simple_type!(deserialize_char, $($mut)?);
20312016

2032-
/// Character represented as [strings](#method.deserialize_str).
2033-
#[inline]
2034-
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, DeError>
2035-
where
2036-
V: Visitor<'de>,
2037-
{
2038-
self.deserialize_str(visitor)
2039-
}
2040-
2041-
fn deserialize_str<V>($($mut)? self, visitor: V) -> Result<V::Value, DeError>
2042-
where
2043-
V: Visitor<'de>,
2044-
{
2045-
let text = self.read_string()?;
2046-
match text {
2047-
Cow::Borrowed(string) => visitor.visit_borrowed_str(string),
2048-
Cow::Owned(string) => visitor.visit_string(string),
2049-
}
2050-
}
2051-
2052-
/// Representation of owned strings the same as [non-owned](#method.deserialize_str).
2053-
#[inline]
2054-
fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, DeError>
2055-
where
2056-
V: Visitor<'de>,
2057-
{
2058-
self.deserialize_str(visitor)
2059-
}
2017+
forward_to_simple_type!(deserialize_str, $($mut)?);
2018+
forward_to_simple_type!(deserialize_string, $($mut)?);
20602019

20612020
/// Forwards deserialization to the [`deserialize_any`](#method.deserialize_any).
20622021
#[inline]
@@ -2163,7 +2122,6 @@ use crate::{
21632122
events::{BytesCData, BytesEnd, BytesRef, BytesStart, BytesText, Event},
21642123
name::QName,
21652124
reader::NsReader,
2166-
utils::CowRef,
21672125
};
21682126
use serde::de::{
21692127
self, Deserialize, DeserializeOwned, DeserializeSeed, IntoDeserializer, SeqAccess, Visitor,

src/de/text.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::{
22
de::simple_type::SimpleTypeDeserializer,
33
de::{Text, TEXT_KEY},
44
errors::serialize::DeError,
5-
utils::CowRef,
65
};
76
use serde::de::value::BorrowedStrDeserializer;
87
use serde::de::{DeserializeSeed, Deserializer, EnumAccess, VariantAccess, Visitor};

0 commit comments

Comments
 (0)