Skip to content

Commit b8ce862

Browse files
weiznichMingun
authored andcommitted
Use namespace-aware reader in serde deserializer
This affects performance of the serde deserializer by ~20%, unfortunately
1 parent 341db46 commit b8ce862

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/de/mod.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -2016,7 +2016,7 @@ use crate::{
20162016
errors::Error,
20172017
events::{BytesCData, BytesEnd, BytesStart, BytesText, Event},
20182018
name::QName,
2019-
reader::Reader,
2019+
reader::NsReader,
20202020
utils::CowRef,
20212021
};
20222022
use serde::de::{
@@ -2415,7 +2415,7 @@ where
24152415
/// # use pretty_assertions::assert_eq;
24162416
/// use serde::Deserialize;
24172417
/// use quick_xml::de::Deserializer;
2418-
/// use quick_xml::Reader;
2418+
/// use quick_xml::NsReader;
24192419
///
24202420
/// #[derive(Deserialize)]
24212421
/// struct SomeStruct {
@@ -2432,7 +2432,7 @@ where
24322432
/// let err = SomeStruct::deserialize(&mut de);
24332433
/// assert!(err.is_err());
24342434
///
2435-
/// let reader: &Reader<_> = de.get_ref().get_ref();
2435+
/// let reader: &NsReader<_> = de.get_ref().get_ref();
24362436
///
24372437
/// assert_eq!(reader.error_position(), 28);
24382438
/// assert_eq!(reader.buffer_position(), 41);
@@ -2783,7 +2783,7 @@ where
27832783
/// Create new deserializer that will borrow data from the specified string
27842784
/// and use specified entity resolver.
27852785
pub fn from_str_with_resolver(source: &'de str, entity_resolver: E) -> Self {
2786-
let mut reader = Reader::from_str(source);
2786+
let mut reader = NsReader::from_str(source);
27872787
let config = reader.config_mut();
27882788
config.expand_empty_elements = true;
27892789

@@ -2826,7 +2826,7 @@ where
28262826
/// will borrow instead of copy. If you have `&[u8]` which is known to represent
28272827
/// UTF-8, you can decode it first before using [`from_str`].
28282828
pub fn with_resolver(reader: R, entity_resolver: E) -> Self {
2829-
let mut reader = Reader::from_reader(reader);
2829+
let mut reader = NsReader::from_reader(reader);
28302830
let config = reader.config_mut();
28312831
config.expand_empty_elements = true;
28322832

@@ -3078,7 +3078,7 @@ pub trait XmlRead<'i> {
30783078
/// You cannot create it, it is created automatically when you call
30793079
/// [`Deserializer::from_reader`]
30803080
pub struct IoReader<R: BufRead> {
3081-
reader: Reader<R>,
3081+
reader: NsReader<R>,
30823082
start_trimmer: StartTrimmer,
30833083
buf: Vec<u8>,
30843084
}
@@ -3091,7 +3091,7 @@ impl<R: BufRead> IoReader<R> {
30913091
/// use serde::Deserialize;
30923092
/// use std::io::Cursor;
30933093
/// use quick_xml::de::Deserializer;
3094-
/// use quick_xml::Reader;
3094+
/// use quick_xml::NsReader;
30953095
///
30963096
/// #[derive(Deserialize)]
30973097
/// struct SomeStruct {
@@ -3108,12 +3108,12 @@ impl<R: BufRead> IoReader<R> {
31083108
/// let err = SomeStruct::deserialize(&mut de);
31093109
/// assert!(err.is_err());
31103110
///
3111-
/// let reader: &Reader<Cursor<&str>> = de.get_ref().get_ref();
3111+
/// let reader: &NsReader<Cursor<&str>> = de.get_ref().get_ref();
31123112
///
31133113
/// assert_eq!(reader.error_position(), 28);
31143114
/// assert_eq!(reader.buffer_position(), 41);
31153115
/// ```
3116-
pub const fn get_ref(&self) -> &Reader<R> {
3116+
pub const fn get_ref(&self) -> &NsReader<R> {
31173117
&self.reader
31183118
}
31193119
}
@@ -3147,7 +3147,7 @@ impl<'i, R: BufRead> XmlRead<'i> for IoReader<R> {
31473147
/// You cannot create it, it is created automatically when you call
31483148
/// [`Deserializer::from_str`].
31493149
pub struct SliceReader<'de> {
3150-
reader: Reader<&'de [u8]>,
3150+
reader: NsReader<&'de [u8]>,
31513151
start_trimmer: StartTrimmer,
31523152
}
31533153

@@ -3158,7 +3158,7 @@ impl<'de> SliceReader<'de> {
31583158
/// # use pretty_assertions::assert_eq;
31593159
/// use serde::Deserialize;
31603160
/// use quick_xml::de::Deserializer;
3161-
/// use quick_xml::Reader;
3161+
/// use quick_xml::NsReader;
31623162
///
31633163
/// #[derive(Deserialize)]
31643164
/// struct SomeStruct {
@@ -3175,12 +3175,12 @@ impl<'de> SliceReader<'de> {
31753175
/// let err = SomeStruct::deserialize(&mut de);
31763176
/// assert!(err.is_err());
31773177
///
3178-
/// let reader: &Reader<&[u8]> = de.get_ref().get_ref();
3178+
/// let reader: &NsReader<&[u8]> = de.get_ref().get_ref();
31793179
///
31803180
/// assert_eq!(reader.error_position(), 28);
31813181
/// assert_eq!(reader.buffer_position(), 41);
31823182
/// ```
3183-
pub const fn get_ref(&self) -> &Reader<&'de [u8]> {
3183+
pub const fn get_ref(&self) -> &NsReader<&'de [u8]> {
31843184
&self.reader
31853185
}
31863186
}
@@ -3781,12 +3781,12 @@ mod tests {
37813781
"#;
37823782

37833783
let mut reader1 = IoReader {
3784-
reader: Reader::from_reader(s.as_bytes()),
3784+
reader: NsReader::from_reader(s.as_bytes()),
37853785
start_trimmer: StartTrimmer::default(),
37863786
buf: Vec::new(),
37873787
};
37883788
let mut reader2 = SliceReader {
3789-
reader: Reader::from_str(s),
3789+
reader: NsReader::from_str(s),
37903790
start_trimmer: StartTrimmer::default(),
37913791
};
37923792

@@ -3812,7 +3812,7 @@ mod tests {
38123812
"#;
38133813

38143814
let mut reader = SliceReader {
3815-
reader: Reader::from_str(s),
3815+
reader: NsReader::from_str(s),
38163816
start_trimmer: StartTrimmer::default(),
38173817
};
38183818

0 commit comments

Comments
 (0)