|
2 | 2 | //! underlying byte stream. |
3 | 3 |
|
4 | 4 | use std::fs::File; |
5 | | -use std::io::{self, BufRead, BufReader}; |
| 5 | +use std::io::{self, BufRead, BufReader, Read}; |
6 | 6 | use std::path::Path; |
7 | 7 |
|
8 | 8 | use memchr; |
@@ -223,6 +223,34 @@ impl<R: BufRead> Reader<R> { |
223 | 223 | } |
224 | 224 | } |
225 | 225 |
|
| 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 | + |
226 | 254 | #[cfg(feature = "encoding")] |
227 | 255 | impl Reader<BufReader<DecodeReaderBytes<File, Vec<u8>>>> { |
228 | 256 | /// Creates an XML reader from a file path. |
@@ -273,6 +301,51 @@ impl Reader<BufReader<File>> { |
273 | 301 | } |
274 | 302 | } |
275 | 303 |
|
| 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 | + |
276 | 349 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
277 | 350 |
|
278 | 351 | /// Implementation of `XmlSource` for any `BufRead` reader using a user-given |
|
0 commit comments