Skip to content

Commit 9202869

Browse files
committed
temp2
1 parent e6c6716 commit 9202869

File tree

6 files changed

+90
-38
lines changed

6 files changed

+90
-38
lines changed

Changelog.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@
217217
[#439]: https://github.com/tafia/quick-xml/pull/439
218218
[#440]: https://github.com/tafia/quick-xml/pull/440
219219

220-
221220
## 0.23.0 -- 2022-05-08
222221

223222
- feat: add support for `i128` / `u128` in attributes or text/CDATA content

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@ Note that despite not focusing on performance (there are several unnecessary cop
270270
Benchmarking is hard and the results depend on your input file and your machine.
271271

272272
Here on my particular file, quick-xml is around **50 times faster** than [xml-rs](https://crates.io/crates/xml-rs) crate.
273-
_(measurements was done while this crate named quick-xml)_
274273

275274
```
276275
// quick-xml benches

src/de/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ use serde::de::{self, Deserialize, DeserializeOwned, Visitor};
225225
use std::borrow::Cow;
226226
#[cfg(feature = "overlapped-lists")]
227227
use std::collections::VecDeque;
228-
use std::io::BufRead;
228+
use std::io::{BufReader, Read};
229229
#[cfg(feature = "overlapped-lists")]
230230
use std::num::NonZeroUsize;
231231

@@ -301,7 +301,7 @@ where
301301
/// as much as possible, use [`from_str`].
302302
pub fn from_reader<R, T>(reader: R) -> Result<T, DeError>
303303
where
304-
R: BufRead,
304+
R: Read,
305305
T: DeserializeOwned,
306306
{
307307
let mut de = Deserializer::from_reader(reader);
@@ -685,7 +685,7 @@ impl<'de> Deserializer<'de, SliceReader<'de>> {
685685

686686
impl<'de, R> Deserializer<'de, IoReader<R>>
687687
where
688-
R: BufRead,
688+
R: Read,
689689
{
690690
/// Create new deserializer that will copy data from the specified reader
691691
/// into internal buffer. If you already have a string use [`Self::from_str`]
@@ -908,12 +908,12 @@ pub trait XmlRead<'i> {
908908
///
909909
/// You cannot create it, it is created automatically when you call
910910
/// [`Deserializer::from_reader`]
911-
pub struct IoReader<R: BufRead> {
912-
reader: Reader<R>,
911+
pub struct IoReader<R: Read> {
912+
reader: Reader<BufReader<R>>,
913913
buf: Vec<u8>,
914914
}
915915

916-
impl<'i, R: BufRead> XmlRead<'i> for IoReader<R> {
916+
impl<'i, R: Read> XmlRead<'i> for IoReader<R> {
917917
fn next(&mut self) -> Result<DeEvent<'static>, DeError> {
918918
let event = loop {
919919
let e = self.reader.read_event_into(&mut self.buf)?;

src/reader/buffered_reader.rs

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//! underlying byte stream.
33
44
use std::fs::File;
5-
use std::io::{self, BufRead, BufReader};
5+
use std::io::{self, BufRead, BufReader, Read};
66
use std::path::Path;
77

88
use memchr;
@@ -223,6 +223,34 @@ impl<R: BufRead> Reader<R> {
223223
}
224224
}
225225

226+
// #[cfg(feature = "encoding")]
227+
// impl<R: Read> Reader<BufReader<DecodeReaderBytes<R, Vec<u8>>>> {
228+
// /// Creates an XML reader from a file path.
229+
// pub fn from_read_impl<P: Read>(reader: P) -> Result<Self> {
230+
// let decoder = DecodeReaderBytesBuilder::new()
231+
// .encoding(Some(UTF_8))
232+
// .bom_override(true)
233+
// .build(reader);
234+
235+
// let reader = Self {
236+
// reader: BufReader::new(decoder),
237+
// opened_buffer: Vec::new(),
238+
// opened_starts: Vec::new(),
239+
// tag_state: TagState::Init,
240+
// expand_empty_elements: false,
241+
// trim_text_start: false,
242+
// trim_text_end: false,
243+
// trim_markup_names_in_closing_tags: true,
244+
// check_end_names: true,
245+
// buf_position: 0,
246+
// check_comments: false,
247+
// encoding: EncodingRef::Implicit(UTF_8),
248+
// };
249+
// Ok(reader)
250+
// }
251+
// }
252+
253+
226254
#[cfg(feature = "encoding")]
227255
impl Reader<BufReader<DecodeReaderBytes<File, Vec<u8>>>> {
228256
/// Creates an XML reader from a file path.
@@ -273,6 +301,51 @@ impl Reader<BufReader<File>> {
273301
}
274302
}
275303

304+
#[cfg(not(feature = "encoding"))]
305+
impl<R: Read> Reader<BufReader<R>> {
306+
/// Creates an XML reader from a file path.
307+
pub fn from_reader(reader: R) -> Self {
308+
Self {
309+
reader: BufReader::new(reader),
310+
opened_buffer: Vec::new(),
311+
opened_starts: Vec::new(),
312+
tag_state: TagState::Init,
313+
expand_empty_elements: false,
314+
trim_text_start: false,
315+
trim_text_end: false,
316+
trim_markup_names_in_closing_tags: true,
317+
check_end_names: true,
318+
buf_position: 0,
319+
check_comments: false,
320+
}
321+
}
322+
}
323+
324+
#[cfg(feature = "encoding")]
325+
impl<R: Read> Reader<BufReader<DecodeReaderBytes<R, Vec<u8>>>> {
326+
/// Creates an XML reader from a file path.
327+
pub fn from_reader(reader: R) -> Self {
328+
let decoder = DecodeReaderBytesBuilder::new()
329+
.encoding(Some(UTF_8))
330+
.bom_override(true)
331+
.build(reader);
332+
Self {
333+
reader: BufReader::new(decoder),
334+
opened_buffer: Vec::new(),
335+
opened_starts: Vec::new(),
336+
tag_state: TagState::Init,
337+
expand_empty_elements: false,
338+
trim_text_start: false,
339+
trim_text_end: false,
340+
trim_markup_names_in_closing_tags: true,
341+
check_end_names: true,
342+
buf_position: 0,
343+
check_comments: false,
344+
encoding: EncodingRef::Implicit(UTF_8),
345+
}
346+
}
347+
}
348+
276349
////////////////////////////////////////////////////////////////////////////////////////////////////
277350

278351
/// Implementation of `XmlSource` for any `BufRead` reader using a user-given

src/reader/mod.rs

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -330,33 +330,11 @@ pub struct Reader<R> {
330330
encoding: EncodingRef,
331331
}
332332

333-
/// Builder methods
334-
impl<R: Read> Reader<R> {
335-
/// Creates a `Reader` that reads from a given reader.
336-
pub fn from_reader(reader: R) -> Self {
337-
Self {
338-
reader,
339-
opened_buffer: Vec::new(),
340-
opened_starts: Vec::new(),
341-
tag_state: TagState::Init,
342-
expand_empty_elements: false,
343-
trim_text_start: false,
344-
trim_text_end: false,
345-
trim_markup_names_in_closing_tags: true,
346-
check_end_names: true,
347-
buf_position: 0,
348-
check_comments: false,
349-
350-
#[cfg(feature = "encoding")]
351-
encoding: EncodingRef::Implicit(UTF_8),
352-
}
353-
}
354-
355-
configure_methods!();
356-
}
357-
358333
/// Getters
359334
impl<R> Reader<R> {
335+
// Builder methods
336+
configure_methods!();
337+
360338
/// Consumes `Reader` returning the underlying reader
361339
///
362340
/// Can be used to compute line and column of a parsing error position

src/reader/ns_reader.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,16 @@ pub struct NsReader<R> {
3232
}
3333

3434
/// Builder methods
35-
impl<R: Read> NsReader<R> {
35+
impl<R> NsReader<R> {
36+
configure_methods!(reader);
37+
}
38+
39+
impl<R: Read> NsReader<BufReader<R>> {
3640
/// Creates a `NsReader` that reads from a reader.
3741
#[inline]
3842
pub fn from_reader(reader: R) -> Self {
3943
Self::new(Reader::from_reader(reader))
4044
}
41-
42-
configure_methods!(reader);
4345
}
4446

4547
/// Private methods
@@ -509,7 +511,8 @@ impl<R: BufRead> NsReader<R> {
509511
impl NsReader<BufReader<File>> {
510512
/// Creates an XML reader from a file path.
511513
pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> {
512-
Ok(Self::new(Reader::from_file(path)?))
514+
let file = File::open(path)?;
515+
Ok(Self::from_reader(file))
513516
}
514517
}
515518

0 commit comments

Comments
 (0)