diff options
author | HampusM <hampus@hampusmat.com> | 2023-05-09 20:38:46 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2023-05-11 21:05:53 +0200 |
commit | 8818a94ad79ebdebdf4c7819bd42e363c63bd630 (patch) | |
tree | 0a757ff271bf9d4d15be1a3a947f58b613961cbf /src/deserializer/buffered.rs | |
parent | e762babd9e69400ccd178ba8946168640093eb63 (diff) |
feat: add optional deserializer generics static bounds
Diffstat (limited to 'src/deserializer/buffered.rs')
-rw-r--r-- | src/deserializer/buffered.rs | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/deserializer/buffered.rs b/src/deserializer/buffered.rs index 7a6058b..6568910 100644 --- a/src/deserializer/buffered.rs +++ b/src/deserializer/buffered.rs @@ -5,25 +5,29 @@ use std::io::BufRead; use quick_xml::events::Event; use quick_xml::Reader; -use crate::deserializer::{Deserializer, Error, IgnoreEnd}; +use crate::deserializer::{Deserializer, Error, IgnoreEnd, MaybeStatic}; use crate::event::EventExt; use crate::tagged::TagStart; +use crate::util::trait_alias; use crate::DeserializeTagged; +trait_alias! { + /// A XML deserializer source with an internal buffer. + pub Source: BufRead + MaybeStatic; +} + /// XML deserializer using a source which has an internal buffer. -pub struct Buffered<Source: BufRead> +pub struct Buffered<TSource: Source> { - reader: Reader<Source>, + reader: Reader<TSource>, leftover_event: Option<Event<'static>>, buf: Vec<u8>, } -impl<Source> Buffered<Source> -where - Source: BufRead, +impl<TSource: Source> Buffered<TSource> { /// Returns a new [`Buffered`]. - pub fn new(source: Source) -> Self + pub fn new(source: TSource) -> Self { let mut reader = Reader::from_reader(source); @@ -38,9 +42,7 @@ where } } -impl<Source> Deserializer for Buffered<Source> -where - Source: BufRead, +impl<TSource: Source> Deserializer for Buffered<TSource> { fn de_tag<De: DeserializeTagged>( &mut self, @@ -84,9 +86,9 @@ where Ok(deserialized) } - fn de_tag_list<De: DeserializeTagged>( + fn de_tag_list<De: DeserializeTagged, Name: AsRef<str>>( &mut self, - tag_name: Option<&str>, + tag_name: Option<Name>, ) -> Result<Vec<De>, Error<De::Error>> { let mut deserialized_items = Vec::new(); @@ -94,10 +96,10 @@ where loop { let start = match self.read_event()? { Event::Start(start) - if tag_name.map_or_else( + if tag_name.as_ref().map_or_else( || true, |expected_tag_name| { - start.name().as_ref() == expected_tag_name.as_bytes() + start.name().as_ref() == expected_tag_name.as_ref().as_bytes() }, ) => { @@ -174,9 +176,7 @@ where } } -impl<Source> Buffered<Source> -where - Source: BufRead, +impl<TSource: Source> Buffered<TSource> { fn read_end_event(&mut self, tag_name: &[u8]) -> Result<(), Error<Infallible>> { |