From d02734fb6d030c028e186ceb5508367c5ab84f7f Mon Sep 17 00:00:00 2001 From: Edward Barnard Date: Sat, 26 Sep 2015 15:45:23 +0100 Subject: Fuse xml reader on error --- src/binary/reader.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/binary') diff --git a/src/binary/reader.rs b/src/binary/reader.rs index 75c7535..837f216 100644 --- a/src/binary/reader.rs +++ b/src/binary/reader.rs @@ -38,7 +38,8 @@ pub struct StreamingParser { stack: Vec, object_offsets: Vec, reader: R, - ref_size: u8 + ref_size: u8, + finished: bool } impl StreamingParser { @@ -47,7 +48,8 @@ impl StreamingParser { stack: Vec::new(), object_offsets: Vec::new(), reader: reader, - ref_size: 0 + ref_size: 0, + finished: false } } @@ -262,10 +264,20 @@ impl Iterator for StreamingParser { type Item = ParserResult; fn next(&mut self) -> Option> { - match self.read_next() { - Ok(Some(result)) => Some(Ok(result)), - Err(err) => Some(Err(err)), - Ok(None) => None + if self.finished { + None + } else { + match self.read_next() { + Ok(Some(event)) => Some(Ok(event)), + Err(err) => { + self.finished = true; + Some(Err(err)) + }, + Ok(None) => { + self.finished = true; + None + } + } } } } -- cgit v1.2.3